{foreach} を使用して、通常の数値添字配列と同じように 連想配列 をループします。 {section} のように、数値添字の配列のみ をループさせるということはありません。 {foreach} の構文は {section} よりずっと簡単ですが、その代わりに 1つの配列 しか扱えません。すべての {foreach} タグは、 終了タグ {/foreach} とペアである必要があります。
| 属性名 | 型 | 必須 | デフォルト | 概要 |
|---|---|---|---|---|
| from | array | Yes | n/a | ループに使用する配列 |
| item | string | Yes | n/a | 現在の要素を示す変数の名前 |
| key | string | No | n/a | 現在のキーを示す変数の名前 |
| name | string | No | n/a | foreach プロパティにアクセスするための foreach ループ名 |
必須の属性は from と item です。
{foreach} ループの name は、英数字とアンダースコアを使用して自由に命名できます。これは PHP の変数 と同じです。
{foreach} ループはネスト可能で、ネストした {foreach} の name はお互いにユニークである必要があります。
from 属性は、通常は値の配列で、 {foreach} のループ回数を決定するために使われます。
{foreachelse} は、 from 変数の値が存在しない場合に実行されます。
{foreach} ループは、プロパティを操作する変数を自身で持っています。 これらは次のように表されます。 {$smarty.foreach.name.property} ここで、"name" は name 属性の値となります。
注意: name 属性が必要となるのは {foreach} のプロパティにアクセスする必要がある場合のみです。 これは {section} の場合とは異なります。{foreach} のプロパティに対して 定義されていない name でアクセスしてもエラーは発生しませんが、 結果は予測できない値になります。
{foreach} のプロパティには index、 iteration、 first、 last、 show、 total があります。
例 7-6. item および key 属性の説明
$myArray を キー/値 のペアで出力するテンプレート。 PHP の foreach と似ています。
出力
|
例 7-8. {foreach} で item と key をネストする例 配列を Smarty に割り当てます。key にはループする値のキーが含まれます。
$contact を出力するテンプレート
出力
|
例 7-9. データベースを使用する {foreachelse} の例 データベース (PEAR や ADODB など) を検索する例で、クエリの結果を Smarty に割り当てます。
結果がない場合に、{foreachelse} を使用して "見つかりません" と表示するテンプレート
|
show は {foreach} のパラメータとして使用します。 show は boolean 値です。 FALSE の場合は {foreach} は表示されず、 もし {foreachelse} が存在すれば、それが代わりに表示されます。
total には、 {foreach} がループするトータル回数が含まれます。 これは、{foreach} の内部だけではなく ループを抜けた後でも使用できます。
{section} および $smarty.foreach も参照してください。