連載
» 2007年10月09日 00時00分 公開

今から始める MySQL入門(11):Smartyでテンプレートエンジンの威力を知る (3/3)

[鶴長鎮一,@IT]
前のページへ 1|2|3       

Smartyの機能を知る(2)

ループ処理と連想配列「smarty3.php/template3.tpl」

 Smartyのテンプレートでループ処理を行うには、foreach以外にsectionを利用することもできます。foreachでは1つの配列しか扱うことができませんが、その代わり連想配列を簡単に扱うことができます。通常配列はインデックス番号で各要素を取り出しますが、連想配列ではキーを用いて対応する値を取り出すことができます。

{foreach from=[配列] key=[キー] item=[アイテム] name=[このループブロックの名前]}
// 処理
{foreachelse}
// [配列]が空だった場合の処理
{/foreach}
      ■foreachの基本構文〜連想配列を指定した場合〜

 smarty3.phpでは、19行目のように連想配列を作成しています。連想配列$dataでは、例えばキーに「Sun」を指定することで、値「日曜日」にアクセスすることができます。

18 //連想配列の作成
19 $data = array("Sun"=>"日曜日","Mon"=>"月曜日","Tue"=>"火曜日","Wed"=>"水曜日");
20
21 //テンプレートの変数に値を割り当てる
22 $smarty->assign("title", "Smartyサンプル3");
23 $smarty->assign("data", $data);
24
25 //テンプレートを指定し表示
26 $smarty->display("template3.tpl");
      リスト5 smarty3.php

 foreachでは、キーを取り出すために、「key=[キー]」で指定されたキー名(ここでは「key」)を利用します。値の取り出しには先ほどのtemplate2.tpl同様、{$value}を利用します。

14 {* 連想配列の利用 *}
15 {foreach from=$data key=key item=value name=loop01}
16 <li>キーは「{$key|escape}」、値は「{$value|escape}」</li>
17 {foreachelse}
18 表示させるデータがありません。
19 {/foreach}
      リスト6 templates/template3.tpl

画面3 smarty3.phpの動作画面 画面3 smarty3.phpの動作画面

foreachのネスト(入れ子)「smarty4.php/template4.tpl」「smarty5.php/template5.tpl」

 連想配列を配列化したような場合、foreachのネスト(入れ子)を用いて各要素を展開することもできます。

18 //連想配列の配列化
19 $data = array(
20 array("name"=>"MySQL","price"=>"850円","qty"=>"5"),
21 array("name"=>"BIND9","price"=>"780円","qty"=>"4"),
22 array("name"=>"Apache","price"=>"480円","qty"=>"7")
23 );
24
25 //テンプレートの変数に値を割り当てる
26 $smarty->assign("title", "Smartyサンプル4");
27 $smarty->assign("data", $data);
28
29 //テンプレートを指定し表示
30 $smarty->display("template4.tpl");
      リスト7 smarty4.php

14 {* 連想配列の配列利用 *}
15 {foreach from=$data item=value01 name=loop01}
16 {foreach from=$value01 key=key item=value02 name=loop02}
17 {$key|escape}:{$value02|escape},
18 {/foreach}
19 <br>
20 {foreachelse}
21 表示させるデータがありません。
22 {/foreach}
      リスト8 templates/template4.tpl

画面4 smarty4.phpの動作画面 画面4 smarty4.phpの動作画面

 連想配列のキーがあらかじめ分かっている場合には、1つ目のforeachで取り出された連想配列に対し、キーによって直接値にアクセスすることができます(例えば「item=[アイテム]」なら「$アイテム.キー」)。

 template5.tplではforeachで$dataを展開し、連想配列を$value01で取り出しています。$value01.nameでキー「name」に対する値、$value01.priceでキー「price」に対する値、$value01.qtyでキー「qty」に対する値にアクセスすることができます。キーが分かっていれば、foreachのネストは不要です。

30 $smarty->display("template5.tpl");
      リスト8 smarty5.php

 smarty5.phpでは、30行目のテンプレートの指定が異なるだけで、連想配列の配列化をはじめとするそのほかの手順はsmarty4.phpと同様です。

 template5.tplでは、<table>〜</table>を使って、要素をテーブル表記に加工しています。連想配列のキーがデザイン作業側で分かっているケースでは、要素数や各要素の名称もロジック制作者から伝えられていることが多く、こうしたテーブル表記が多く用いられます。

14 {* 連想配列の利用 *}
15 <table border="1" cellpadding="3" cellspacing="0">
16 <tr><th>名前</th>
17 <th>価格</th>
18 <th>在庫数</th>
19 </tr>
20 {foreach from=$data item=value01 name=loop01}
21 <tr><td>{$value01.name|escape}</td>
22 <td>{$value01.price|escape}</td>
23 <td>{$value01.qty|escape}</td>
24 </tr>
25 {foreachelse}
26 表示させるデータがありません。
27 {/foreach}
28 </table>
      リスト9 templates/template5.tpl

画面5 smarty5.phpの動作画面 画面5 smarty5.phpの動作画面

 以上、PHPのテンプレートエンジンとして広く利用されているSmartyの基本構文について紹介しました。

 最終回となる次回では、Smartyを活用し、前回までに作成した「簡易オンラインストア」のロジックとデザインを分離する方法を紹介します。さらに、テンプレートを活用して携帯電話用コンテンツとPC用コンテンツを同時に実現する方法にも触れます。(次回に続く)


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。