第3回 Smartyを使ってみる(その2:制御構造編) - Smarty講座
yossy先生のSmarty講座
Lecutures on PHP
第3回 Smartyを使ってみる(その2:制御構造編) (その2)
ループ -foreach

さて前回、PHPからSmartyテンプレートへ配列を渡してその要素を表示する方法を説明しました。
しかし配列の要素数が不定の場合、全部の要素を表示するために、いちいち添え字を指定して配列の要素にアクセスするのは無理があります。
そこで配列の要素を順に取得し、繰り返し処理を実行するための方法を説明します。{foreach}を用いる方法です。
{* 配列変数$friendsの要素を順に取得し、リスト表示 *}
<ul>
{foreach from=$friends item=f}
<li>{$f}</li>
{/foreach}
</ul>
foreachでfromとitemの2つの属性を指定しています。fromには要素を順に取得する配列変数、itemにはループ内で要素にアクセスするための変数名を指定します。
例えばPHPから変数$friendsに以下のような配列が渡されているとします。
$friends = array( 'milukuma', 'willer', 'watal', 'unini' );
$smarty->assign( 'friends', $friends );
上記のSmartyテンプレートの実行結果は以下のようになります。
<ul>
<li>milukuma</li>
<li>willer</li>
<li>watal</li>
<li>unini</li>
</ul>
さてPHPのforeachではキーと値をペアで取得することが出来ますが、Smartyテンプレートのforeachでも同様にキーと値をセットで取得することが出来ます。
{* 配列変数$friendsの要素を順に取得し、リスト表示 *}
<ul>
{foreach from=$friends key=k item=f}
<li>{$k}: {$f}</li>
{/foreach}
</ul>
上記のSmartyテンプレートの実行結果は以下のようになります。{$k}には配列の添え字が格納されます。配列が連想配列の場合も同様にキーが格納されます。
<ul>
<li>0: milukuma</li>
<li>1: willer</li>
<li>2: watal</li>
<li>3: unini</li>
</ul>
もしfromで指定した値が空だったり要素がなかった場合に、エラーメッセージを出すなど特別な処理をしたい場合があります。そのときは{foreachelse}を指定し、その中に表示する内容を記述します。
{* 配列変数$friendsの要素を順に取得し、リスト表示 *}
<ul>
{foreach from=$friends key=k item=f}
<li>{$k}: {$f}</li>
{foreachelse}
<li>友達はいません(T_T)</li>
{/foreach}
</ul>





ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。