foreach,foreachelse
foreachループはsectionループに代わるもので、1つの連想配列をループするために使われます。foreachの構文はsectionよりも簡単ですが、その代わり1つの配列しか使えません。{foreach}と{/foreach}はペアである必要があります。必須のパラメータはfrom とitemです。foreachループの名前には英数字とアンダースコアを使って自由に命名できます。foreachループはネスト可能で、その場合のname属性はお互いにユニ ークである必要があります。from属性で指定した変数(たいていは配列)はforeachをループする回数を決定するために使われます。この変数に値が存在しない場合はforeachelseが実行されます。
例 7-4. foreach {* 配列$custidの値を全て表示 *}
{foreach from=$custid item=curr_id}
id: {$curr_id}<br>
{/foreach}
出力:
id: 1000<br>
id: 1001<br>
id: 1002<br> |
|
例 7-5. foreach key {* keyにはループした各値のキーが含まれます。
この例では次のようなテンプレート変数が割り当てられているとします。
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
*}
{foreach name=outer item=contact from=$contacts}
{foreach key=key item=item from=$contact}
{$key}: {$item}<br>
{/foreach}
{/foreach}
出力:
phone: 1<br>
fax: 2<br>
cell: 3<br>
phone: 555-4444<br>
fax: 555-3333<br>
cell: 760-1234<br> |
|
foreach ループは foreachプロパティを操作する自身の変数を持っています。
これらは次のように表されます: {$smarty.foreach.foreachname.varname}
foreachname は foreach の name 属性として指定された名前になります。
iteration
iteration は現在のループが反復された回数を表示します。
iteration は常に 1 から始まり、各iteration によって 1 ずつ 増加されます。
first
first は現在の foreach の反復が最初の時、true がセットされます。
last
lastは 現在の foreach の反復が最後の時、true がセットされます。
show
show は foreach のパラメータとして使用されます。
show は true または false の boolean 値です。もしこれが
false の場合は、foreach は表示されません。もし foreachelse が存在する場合は、
代わりとして表示されます。
total
total は foreach がループしたトータル回数を表示します。
これは foreach 内部または foreach ループを抜けた後でも使用できます。