{foreach}関数 テンプレート内で繰り返し
通常の数値添字配列と同じように 連想配列 を繰り返します。
{section} のように、数値添字の配列のみ を繰り返すということはありません。
{foreach} の構文は {section} よりずっと簡単ですが、その代わりに 1つの配列 しか扱えません。
すべての {foreach} タグは、 終了タグ {/foreach} とペア(対)である必要があります。
これはPHPのforeach とは使い勝手が違います。
属性名 | 型 | 必須 | デフォルト | 概要 |
---|---|---|---|---|
from | array | Yes | n/a | ループに使用する配列 |
item | string | Yes | n/a | 現在の要素を示す変数の名前 |
key | string | No | n/a | 現在のキーを示す変数の名前 |
name | string | No | n/a | foreach プロパティにアクセスするための foreach ループ名 |
{foreach from=$data key="key" item="value" name="test"} {if $smarty.foreach.test.first} 最初:{$key}:{$value} {elseif $smarty.foreach.test.last} 最後:{$key}:{$value} {else} {$smarty.foreach.test.iteration}:{$key}:{$value} {/if} {foreachelse} データがありません {/foreach} {$smarty.foreach.test.total}件のデータ
foreach from=$data key="key" item="value" name="test"
ですが、
まず、from で、どの配列をループさせるかを指定します。
次に、key , item にそれぞれ、キー名、値名を指定してやります。
name はループ自体の名前をつけてやってあとでアクセスする際に使います。
これで、ループ内で、{$key} {$value} が使えます。
また、ループ内では以下の特殊変数が使えます。
$smarty.foreach.test.first … 最初の要素かどうか
$smarty.foreach.test.last … 最後の要素かどうか
$smarty.foreach.test.iteration … 現在のインデクス
foreach.test. のように test となっていますが、これは foreach で最初に
name="test"
として指定したため、ここで指定しています。
{foreachelse}
によって、データが空だった場合においての出力を指定出来ます。
from 属性は、通常は値の配列で、 {foreach} のループ回数を決定するために使われます。
{foreachelse} は、 from 変数の値が存在しない場合に実行されます。
name は、英数字とアンダースコアを使用して自由に命名できます。
ネスト(入れ子)可能で、ネストした {foreach} の name はお互いに違う名前である必要があります。
{$smarty.foreach.【name 属性の値】.【プロパティ名】}のように、
プロパティを操作する変数を{foreach}自身で持っています。
name 属性が必要となるのは {foreach} のプロパティにアクセスする必要がある場合のみです。
{foreach} のプロパティには index、 iteration、 first、 last、 show、 total があります。
プロパティ | 説明 |
---|---|
$smarty.foreach.test.index | 現在の配列のインデックスをゼロから数えた値 |
$smarty.foreach.test.iteration | 現在のループが反復された回数(.index + 1 の値) |
$smarty.foreach.test.first | 最初の要素かどうか 最初のものであるときに TRUE |
$smarty.foreach.test.last | 最後の要素かどうか 最後のものであるときに TRUE |
$smarty.foreach.test.show | パラメータとして使用します。 show は boolean 値(TRUE/FALSE)です。 FALSE の場合は {foreach} は表示されず、 もし {foreachelse} が存在すれば、それが代わりに表示されます。 |
$smarty.foreach.test.total | 繰り返しのトータル回数 {foreach} の内部だけではなく ループを抜けた後でも使用できる |
関連記事
- {strip}関数 各行の先頭と終端にある半角スペースや改行を除去する
- {php}関数 PHP コードを直接テンプレートに書き込む
- {literal}関数 構文解析の対象にしない
- {ldelim},{rdelim} デリミタを表示する
- {insert}関数 関数を読み込む
- {include_php}関数 PHP スクリプトを読み込む
- {include}関数 他のテンプレートを読み込む
- {config_load}関数 設定ファイル から変数を読み込む
- {capture}関数 出力を変数に受け渡す
- {section}関数 テンプレート内で繰り返し
- {if}関数 条件文
スポンサーリンク