繰り返し(foreach)
{foreach}
{foreachelse}
{/foreach}
を利用すると、解析時に配列の要素に応じた繰り返し処理を行うことが出来る。
書式
{foreach from=[配列] key=[キー] item=[アイテム] name=[このループブロックの名前]}
// 処理
{foreachelse}
// 処理
{/foreach}
foreachの繰り返し処理では、fromに割り当てられた配列の要素数分だけ自動的に繰り返し処理が実行される。繰り返しのたびに、keyに指定したテンプレート変数に配列へのアクセスキーが、itemに指定したテンプレート変数に配列の中身がそれぞれ割り当てられる。nameには、このループの名前を指定することが出来る。foreachはネストが可能なので、対象ブロックを区別することができる。
{foreachelse}を記述している場合、配列の要素が空の場合にこちらのブロックの処理が実行される。
サンプルコード
list.php
<?
require_once "libs/Smarty.class.php";
$i = 0;
$fp = fopen("data.txt", "r");
while ($data = fgetcsv($fp, 1000, ",")) {
$list[$i]['id'] = $data[0];
$list[$i]['name'] = $data[1];
$list[$i]['sex'] = $data[2];
$i++;
}
fclose($fp);
$smarty = new Smarty;
$smarty->clear_cache('list.html');
$smarty->assign("list",$list);
$smarty->display('list.tpl');
?>
foreach.tpl
<html>
<head>
<title>smarty test リスト</title>
</head>
<body>
<table>
<tr>
<th>会員番号</th>
<th>名前</th>
<th>性別</th>
</tr>
{foreach item=row from=$list}
<tr>
<td>{$row.id}</td>
<td>{$row.name}</td>
<td>{$row.sex}</td>
</tr>
{/foreach}
</table>
</body>
</html>
データは
1,矢口真里,女
2,田中太郎,男
3,木村花子,女
4,高橋涼介,男
現在のループ回数を取得する
iteration変数を利用する。
{$smarty.foreach.foreachname.iteration}
最終更新:2008年01月07日 18:22