Smartyのテンプレートでは、表示を簡潔に行うための色々な関数があります。
{foreach}は、概要はPHPのforeachとほぼ同じで、配列の中身を並べて表示するのに役立ちます。
書式はPHPとだいぶ違い、以下のようになります。
{foreach from=$str key=str_key item=str_item name=str_name}
{$str_key}
{$str_item}
{/foreach}
foreach($str as $str_key=>$str_item){
print($str_key);
print($str_item);
}
以上の二つがほぼ同じ意味になります。
name=str_nameはPHPのforeachには存在しない特殊な内容で、ループに関する内容を取得できます。
{$smarty.foreach.str_name.iteration}で現在のループ回数が、
{$smarty.foreach.str_name.first}で最初のループか否か、
{$smarty.foreach.str_name.last}で最後のループか否かといった内容が取得できます。
{if}は、これもPHPのifと同じです。
書式もPHPのifとほぼ同じです。
{if $a==1}
{$a}
{else}
{$b}
{/if}
if($a==1){
print($a);
}else{
print($b);
}
条件演算子はそのまま使えます。
また特殊な指定として、{if $a is even}が「偶数なら」になるといった、表示するのに便利な指定が幾つかあります。
ifとforeachを組み合わせることで、配列からテーブルを作成し、最初のループだったら<table>と記入、偶数行だったら背景色を変更、といったことができるようになります。
ただfirstとかは、後述のようにループの外に書いた方がわかりやすいですが。
上記の{if}と{foreach}を使用して簡単なテーブルを作ってみました。
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
//Smarty
require_once('./../../smarty/libs/Smarty.php');
//変数
$str=array(
array(
'familyname'=>'小町'
,'firstname'=>'つぐみ'
,'ext'=>'武'
)
,array(
'familyname'=>'茜ケ崎'
,'firstname'=>'空'
,'ext'=>'武'
)
,array(
'familyname'=>'田中'
,'firstname'=>'優美清春香菜'
)
);
//変数アサイン
$smarty->assign('str',$str);
//表示
$smarty->display('index.html');
|
index.tpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<html>
<table border="1"> {*開始/終了タグは外側に書いた方がわかりやすい*}
{*ループ開始*}
{foreach from=$str item=str_item name=str_name}
{*偶数の場合のみbgcolorを表示*}
<tr{if $smarty.foreach.str_name.iteration is even}
bgcolor="#cccccc"
{/if}>
<td>{$str_item.familyname}</td>
<td>{$str_item.firstname}</td>
<td>
{if $str_item.ext}
{*$str_item.extが存在すれば*}
{$str_item.ext}
{else}
{*$str_item.extが存在しなければ*}
{/if}
</td>
</tr>
{if $smarty.foreach.str_name.last}
</table>{*最終ループなら終了タグを表示する、が少々分かり難い*}
{/if}
{/foreach}{*ループ終了*}
</body></html>
|
出力は以下のようになります。
小町 | つぐみ | 武 |
茜ケ崎 | 空 | 武 |
田中 | 優美清春香菜 |
{*コメント*}はSmartyのコメントで、HTMLのソースには出力されません。
出力されるコメントとしては普通に<!--コメント-->が使えます。
今回は中身が短いので却ってソースが長くなって分かり難く見えますが、Smartyを使い慣れると非常に使いやすくて便利になって手放せなくなります。
{cycle}?
黙れ。