2006年02月11日
表(行)を表示するには?
しばらく、脱線ネタで日を稼いでましたが、続きです。
表示する項目が多い場合、連想配列を使うと便利です。というのは、前回の話で、今回は、表の行のような、繰り返し表示する方法です。
このような場合は、出力が何行になるか?は分かりません。データベースを読んで初めてわかるものです。なので、最初からテンプレートに
{$member.name1}
{$member.name2}
{$member.name3}
とは書けません。
テンプレートには、PHPプログラムからの値を表示するだけでなく、いわゆる制御構造をいうモノを持っています。
なんですか?それ?
プログラムの世界は、「順番に実行する」「繰り返す」「分岐する」といった基本的な処理の組み合わせです。この基本的な処理のことを制御構造と言います(厳密には違うのかな…)。
つまり、Smartyのテンプレートには、この制御構造、言ってしまえば、簡単なプログラムが書けます。
これが、ホントに便利なところでもあるし、使い方を間違ったら、ドンくさいことをしてしまいそうなモノです。
繰り返しで表示するには、次のようにします。
まず、簡単なデータファイル(data.txt)を次のように作ります。
1,矢口真里,女 2,田中太郎,男 3,木村花子,女 4,高橋涼介,男
もっと増やしても構いません。
やることは、このファイルを読み込んで表示するので、ここに書いた分だけ表示されることになります。
次にこれを読み込んでSmartyで表示するプログラム(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.html');
?>
前回は $member['id'] とかいう連想配列に値を入れてましたが、今回は $list[$i]['id'] とかのように、もう1回配列にします。読み込んだデータ数だけ連想配列の配列に入れてやります。そうして、listという名前でテンプレートに渡しています($smarty->assign("list",$list);)。
次にテンプレートのほうです。
<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>
ポイントは {foreach item=row from=$list} の部分です。この {foreach・・・} から {/foreach} までが繰り返されます。繰り返す回数は、$list に入っている数だけ。つまり、PHPプログラムで、データファイルから読み込んだデータ数です。
{foreach item=row from=$list}
は、$listのデータの1行分を row という名前で扱います。なので、繰り返しの中では、$rowという名前を使います。後は連想配列を同じように、$row.id、$row.name、$row.sex という風に書きます。
これで、結果的にデータファイルの内容を表示できます。
row は、PHPの変数名 list と同じ名前でもいいようです。
{foreach item=list from=$list}
<tr>
<td>{$list.id}</td>
<td>{$list.name}</td>
<td>{$list.sex}</td>
</tr>
{/foreach}
こうして統一しておくと、わかりやすいと思います。
この、連想配列でのデータの渡し方と、テンプレートの繰り返しがあれば、結構、なんでも作れます。ほとんどのページに対応できます。
テンプレートには、もっともっと、機能がわんさかとあります。
このあたりを駆使すると、今までPHPプログラムでやっていたことをテンプレート側でできます。と、なると、PHPプログラムがもっともっとすっきりしてきます。
データファイル(とかデータベース)を読んで、表示するデータをSmartyに渡すだけ!といった処理に収まります。PHPプログラムのほうもすっきりします。
今まで、強引にすべてをPHPプログラムに書いていたので、もう、ぐしゃぐしゃ状態ですが、これにより、PHPプログラムはデータの処理だけ、テンプレートは表示だけといった、分離がきれいにできるのです。
2006年02月11日 17:47 | 3.使い方
トラックバック
このエントリーのトラックバックURL:
このリストは、次のエントリーを参照しています: 表(行)を表示するには?:
» ykt_付箋(URL) from [hinami.net:PukiWiki Plus!] (PukiWiki/TrackBack 0.4)
ykt_付箋(URL) 見つけた記事をさっくり保存しておく場所 巡回所(あとで編集する) U... [続きを読む]
トラックバック時刻: 2006年10月19日 20:36



