{section},{sectionelse}
{section} は、 データの配列 をループするために使用します。 これは、{foreach} が 1つの連想配列 をループするのとは異なります。すべての {section} タグは、終了タグ {/section} とペアになっている必要があります。
| 属性名 | 型 | 必須 | デフォルト | 概要 |
|---|---|---|---|---|
| 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 | このセクションを表示するかどうか |
必須の属性は name と loop です。
{section} の name は、 英数字とアンダースコアを使って自由に命名できます。これは PHP の変数 と同様です。
{section} はネスト可能で、その場合の {section} の名前はお互いにユニークである必要があります。
loop 属性で指定されたループ変数 (たいていは配列) は、{section} のループ回数を決定するために使用されます。 loop の値として、整数値を渡すこともできます。
{section} 内で値を表示するには、 変数名に続けてブラケット {} で囲んだセクション名を指定します。
ループ変数に値が存在しない場合は {sectionelse} が実行されます。
{section} には、そのプロパティを操作するための 自身の変数があります。これらには {$smarty.section.name.property} としてアクセスできます。"name" は、name 属性の値です。
{section} のプロパティには、 index、 index_prev、 index_next、 iteration、 first、 last、 rownum、 loop、 show、 total があります。
例 7-30. {section} でのシンプルな配列のループ 配列を Smarty に assign() します。
配列を出力するテンプレート
上の例の出力
|
例 7-32. {section} の名前 {section} の name は自由につけることができます。PHP の変数 を参照してください。これは、{section} 内のデータを参照する際に使用します。
|
例 7-34. {section} での loop 変数の使用 この例では、$custid、$name および $address にはすべて配列が割り当てられ、 その要素数は同じであるものとします。まず、Smarty に配列を割り当てる PHP スクリプトです。
loop 変数は、ループの回数を決定するためにのみ使用します。 {section} 内ではあらゆるテンプレート変数にアクセス可能です。
上の例の出力
|
例 7-35. ネストした {section} {section} は無制限にネスト可能です。{section} をネストすることで、 多次元配列のような複雑なデータ構造にアクセスすることが可能です。 これは、配列を割り当てる .php スクリプトの例です。
このテンプレートでは、$contact_type[customer] は現在の顧客の連絡手段を格納した配列となります。
上の例の出力。
|
例 7-36. データベースを使用する {sectionelse} の例 データベース (ADODB や PEAR) の検索結果を Smarty に格納します。
データベースの結果を HTML のテーブルに出力するテンプレート
|
.index
index は現在のループインデックスを表示します。 0(又は start 属性の値)から始まり、 1(又は step 属性の値)ずつ増加します。
テクニカルノート: step と start 属性が変更されていない場合は、セクションのプロパティ iteration と同じ動作をします。ただ、1 ではなく 0 から始まるという点が異なります。
.index_next
index_next は次回のループインデックスを表示します。 ループの最後でもやはり現在のインデックスの次回の値を返します (step 属性の設定に従います)。
例 7-38. index、index_next および index_prev プロパティ
上の配列をテーブルに出力するテンプレート
上の例の出力するテーブルは次のようになります。
|
.iteration
iteration は現在のループが反復された回数を表示します。
注意: index プロパティとは異なり、これは {section} のプロパティ start、step および max の影響を受けません。 iteration も 1 から始まります。これは index が 0 から始まるのとは異なります。rownum は iteration の別名で、全く同じ働きをします。
例 7-39. セクションのプロパティ iteration
$arr 配列の要素を step=2 で出力するテンプレート
上の例の出力
もうひとつの例は、iteration プロパティを使用して 5 行おきにテーブルのヘッダ部を出力します。 {if} 関数を mod 演算子とともに使用します。
|
.last
last は、現在 {section} の最後の処理を行っている場合に TRUE となります。
例 7-40. {section} プロパティ first と last この例は $customers 配列をループし、 ループの最初でヘッダブロック、そしてループの最後でフッタブロックを出力します。 total プロパティも使用します。
|
.rownum
rownum は現在のループが反復された回数を表示します(1から開始)。 これは iteration の別名で、同じ動作をします。
.show
show は、セクションのパラメータとして使用する boolean 値です。FALSE の場合はこのセクションは表示されません。 {sectionelse} があれば、それが代わりに表示されます。
例 7-42. show プロパティ Boolean $show_customer_info を PHP アプリケーションから渡し、このセクションを表示するかどうかを調整します。
上の例の出力
|
.total
total は {section} がループしたトータル回数を表示します。これは {section} の内部だけでなく外部でも使うことができます。
{foreach} および $smarty.section も参照してください。