Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

{foreach},{foreachelse}

{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 ループ名
  • 必須の属性は fromitem です。

  • {foreach} ループの name は、英数字とアンダースコアを使用して自由に命名できます。これは PHP の変数 と同じです。

  • {foreach} ループはネスト可能で、ネストした {foreach} の name はお互いにユニークである必要があります。

  • from 属性は、通常は値の配列で、 {foreach} のループ回数を決定するために使われます。

  • {foreachelse} は、 from 変数の値が存在しない場合に実行されます。

  • {foreach} ループは、プロパティを操作する変数を自身で持っています。 これらは次のように表されます。 {$smarty.foreach.name.property} ここで、namename 属性の値となります。

    注意

    name 属性が必要となるのは {foreach} のプロパティにアクセスする必要がある場合のみです。 これは {section} の場合とは異なります。{foreach} のプロパティに対して 定義されていない name でアクセスしてもエラーは発生しませんが、 結果は予測できない値になります。

  • {foreach} のプロパティには indexiterationfirstlastshowtotal があります。

Example 7.5. item 属性


<?php
$arr = array(1000, 1001, 1002);
$smarty->assign('myArray', $arr);
?>

  

$myArray を順序なしリストで出力するテンプレート


<ul>
{foreach from=$myArray item=foo}
    <li>{$foo}</li>
{/foreach}
</ul>

  

出力


<ul>
    <li>1000</li>
    <li>1001</li>
    <li>1002</li>
</ul>

  

Example 7.6. item および key 属性の説明


<?php
$arr = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding');
$smarty->assign('myArray', $arr);
?>

  

$myArray を キー/値 のペアで出力するテンプレート。 PHP の foreach と似ています。


<ul>
{foreach from=$myArray key=k item=v}
   <li>{$k}: {$v}</li>
{/foreach}
</ul>

  

出力


<ul>
    <li>9: Tennis</li>
    <li>3: Swimming</li>
    <li>8: Coding</li>
</ul>

  

Example 7.7. {foreach} で連想配列の item 属性を指定する例


<?php
$items_list = array(23 => array('no' => 2456, 'label' => 'Salad'),
                    96 => array('no' => 4889, 'label' => 'Cream')
                    );
$smarty->assign('items', $items_list);
?>

  

$items$myId を url に出力するテンプレート


<ul>
{foreach from=$items key=myId item=i}
  <li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>
{/foreach}
</ul>

  

出力


<ul>
  <li><a href="item.php?id=23">2456: Salad</li>
  <li><a href="item.php?id=96">4889: Cream</li>
</ul>

  

Example 7.8. {foreach} で itemkey をネストする例

配列を Smarty に割り当てます。key にはループする値のキーが含まれます。


<?php
 $smarty->assign('contacts', array(
                             array('phone' => '1',
                                   'fax' => '2',
                                   'cell' => '3'),
                             array('phone' => '555-4444',
                                   'fax' => '555-3333',
                                   'cell' => '760-1234')
                             ));
?>

  

$contact を出力するテンプレート


{foreach name=outer item=contact from=$contacts}
  <hr />
  {foreach key=key item=item from=$contact}
    {$key}: {$item}<br />
  {/foreach}
{/foreach}

  

出力


<hr />
  phone: 1<br />
  fax: 2<br />
  cell: 3<br />
<hr />
  phone: 555-4444<br />
  fax: 555-3333<br />
  cell: 760-1234<br />

  

Example 7.9. データベースを使用する {foreachelse} の例

データベース (PEAR や ADODB など) を検索する例で、クエリの結果を Smarty に割り当てます。


<?php
  $search_condition = "where name like '$foo%' ";
  $sql = 'select contact_id, name, nick from contacts '.$search_condition.' order by name';
  $smarty->assign('results', $db->getAssoc($sql) );
?>

  

結果がない場合に、{foreachelse} を使用して 見つかりません と表示するテンプレート


{foreach key=cid item=con from=$results}
    <a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{foreachelse}
    検索結果が見つかりませんでした
{/foreach}

  

.index

index には、現在の配列のインデックスをゼロから数えた値が含まれます。

Example 7.10. index の例


{* ヘッダブロックを5行おきに出力します *}
<table>
{foreach from=$items key=myId item=i name=foo}
  {if $smarty.foreach.foo.index % 5 == 0}
     <tr><th>タイトル</th></tr>
  {/if}
  <tr><td>{$i.label}</td></tr>
{/foreach}
</table>

  

.iteration

iteration は現在のループが反復された回数を表示します。 index とは異なり、常に 1 から始まります。 各ループごとに 1 ずつ加算されます。

Example 7.11. iteration および index の例


{* この出力は 0|1, 1|2, 2|3, ... のようになります *}
{foreach from=$myArray item=i name=foo}
{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
{/foreach}

  

.first

first は、現在の {foreach} の反復が最初のものであるときに TRUE となります。

Example 7.12. first プロパティの例


{* 最初の項目には「最新」、それ以外は id を表示します *}
<table>
{foreach from=$items key=myId item=i name=foo}
<tr>
  <td>{if $smarty.foreach.foo.first}最新{else}{$myId}{/if}</td>
  <td>{$i.label}</td>
</tr>
{/foreach}
</table>

  

.last

last は、現在の {foreach} の反復が最後のものであるときに TRUE となります。

Example 7.13. last プロパティの例


{* 一覧の最後に横罫線を追加します *}
{foreach from=$items key=part_id item=prod name=products}
  <a href="#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if}
{foreachelse}
  ... コンテンツ ...
{/foreach}

  

.show

show{foreach} のパラメータとして使用します。 show は boolean 値です。 FALSE の場合は {foreach} は表示されず、 もし {foreachelse} が存在すれば、それが代わりに表示されます。

.total

total には、 {foreach} がループするトータル回数が含まれます。 これは、{foreach} の内部だけではなく ループを抜けた後でも使用できます。

Example 7.14. total プロパティの例


{* 返された行の総数を最後に表示します *}
{foreach from=$items key=part_id item=prod name=foo}
{$prod.name}<hr/>
{if $smarty.foreach.foo.last}
  <div id="total">{$smarty.foreach.foo.total} items</div>
{/if}
{foreachelse}
 ... 別の内容 ...
{/foreach}

  

{section} および $smarty.foreach も参照してください。

Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors