{section}関数 テンプレート内で繰り返し
データの配列 をループするために使用します。
これは、{foreach} が 1つの連想配列 をループするのとは異なります。
{section name="test" loop=$data} {$smarty.section.test.iteration}:{$data[test]} {sectionelse} データがありません {/section}
これはphp構文で言うfor文に近いものです。
name にはループ名として自由に指定して、loop ではループさせたいデータを指定するだけです。
{$smarty.section.test.iteration}でインデックス番号($iみたいな添え字)が取れます。
{$data[test]} によって、ループ中の要素が取れます。
更に、section に、
{section name="test" loop=$data start="0" step="2" max="5"}
のように start, step, max を指定することで より for 文チックに細かくループさせることが出来ます。
start は 開始のインデックスの値で、step は1ループごとにインデックスをいくら増分させるかを指定し、
max によって最大何回ループさせるかを指定します。
このmax に関しては"最大何回" の指定なので、若干 for の条件指定とは変わってきます。
属性名 | 型 | 必須 | デフォルト | 概要 |
---|---|---|---|---|
name | string | Yes | n/a | セクション名 |
loop | mixed | Yes | n/a | ループ回数を決定する値 |
start | integer | No | 0 | ループを開始するインデックス位置。 この値が負の場合は、 配列の最後尾から開始位置が算出されます。 例えばループ配列に7つの値があり、そしてstartが-2であるならば、 開始インデックスは5になります。 ループ配列の長さを超えるような無効な値は、 自動的に最も近い値に切り捨てられます。 |
step | integer | No | 1 | ループインデックスを進めるために使われるステップ値。 例えばstep=2なら、インデックスは0, 2, 4をループします。 stepの値が負の場合は、配列の前方に向かって進みます。 |
max | integer | No | n/a | セクションがループする最大の回数 |
show | boolean | No | TRUE | このセクションを表示するかどうか |
loop 属性で指定されたループ変数 (たいていは配列) は、{section} のループ回数を決定するために使用されます。
loop の値として、整数値を渡すこともできます。
{sectionelse} は、 loop 属性で指定されたループ変数の値が存在しない場合に実行されます。
name は、英数字とアンダースコアを使用して自由に命名できます。
ネスト(入れ子)可能で、ネストした {section} の name はお互いに違う名前である必要があります。
{$smarty.section.【name 属性の値】.【プロパティ名】}のように、
プロパティを操作する変数を{section}自身で持っています。
{section} のプロパティには index、 index_prev、 index_next、 iteration、 first、 last、 rownum、 loop、 show、 total があります。
プロパティ | 説明 |
---|---|
$smarty.section.test.index | 現在のループのインデックスの値で、 0(又は start 属性の値)から始まり、 1(又は step 属性の値)ずつ増加します。 |
$smarty.section.test.index_prev | 前回のループインデックスを表示します。 最初のループでは-1がセットされます。 |
$smarty.section.test.index_next | 次回のループインデックスを表示します。 ループの最後でも、次回のインデックスの値を返します(step 属性の設定に従います)。 |
$smarty.section.test.iteration | 現在のループが反復された回数(1 から始まる)。 start、step および max の影響を受けません。 |
$smarty.section.test.rownum | $smarty.section.test.iteration の別名 |
$smarty.section.test.first | 最初の処理かどうか 最初のものであるときに TRUE |
$smarty.section.test.last | 最後の処理かどうか 最後のものであるときに TRUE |
$smarty.section.test.show | パラメータとして使用します。 show は boolean 値(TRUE/FALSE)です。 FALSE の場合は {section} は表示されず、 もし {sectionelse} が存在すれば、それが代わりに表示されます。 |
$smarty.section.test.total | 繰り返しのトータル回数 {section} の内部だけではなく ループを抜けた後でも使用できる |
関連記事
- {strip}関数 各行の先頭と終端にある半角スペースや改行を除去する
- {php}関数 PHP コードを直接テンプレートに書き込む
- {literal}関数 構文解析の対象にしない
- {ldelim},{rdelim} デリミタを表示する
- {insert}関数 関数を読み込む
- {include_php}関数 PHP スクリプトを読み込む
- {include}関数 他のテンプレートを読み込む
- {config_load}関数 設定ファイル から変数を読み込む
- {capture}関数 出力を変数に受け渡す
- {foreach}関数 テンプレート内で繰り返し
- {if}関数 条件文
スポンサーリンク