2006年02月06日
表示するアイテムが多い場合
なるほど、表示したい値(変数)に対して $smarty->assign("…",$…); を繰り返せば表示できますが、普通、1つのページに山ほど表示する値はあります。
手前味噌で恐縮ですが、福井の不動産サイト(http://fukui.fudo-3.info/)の物件の詳細画面ともなると、所在地、沿線、賃料、敷金、礼金、うんぬんかんぬんと。
これ全部について、$smarty->assign("…",$…); をしないといけないのかと思うと、プログラマーはゾッとします。正直、そんなたくさん書くのは面倒。。。でも、これを言っちゃうとダメなので、プログラムの管理上どーのこーのとか、共通化出来んのか?とか言い始めます。バグ対策もあるので、ひとえに否定も出来ませんが、その半分以上は
こんなに書くの面倒じゃ!!
が率直な意見だと思います。現に私はそうです。どうも、プログラマーという人種は、楽をしたがります。
そこで、
連想配列をいう技(?)を使います。
配列を参照する場合は普通は、1番目、2番目で参照しますが、それを文字列で参照するのが連想配列です。
普通の配列は$member[0] = 1;
$member[1] = '矢口真里';
$member[2] = '女';って使いますが、連想配列を使うと
$member['id'] = 1;
$member['name'] = '矢口真里';
$member['sex'] = '女';って書けます。
PHPの特徴の1つは、この連想配列です。いとも簡単に連想配列が扱えます。また、smartyもPHPで作られているので、連想配列がそのまま使えます。
テンプレートに渡す変数を1つ決めて、複数の値はその連想配列で渡します。
このように渡します。
<?require_once "libs/Smarty.class.php";
$member['id'] = 1;
$member['name'] = '矢口真里';
$member['sex'] = '女';$smarty = new Smarty;
$smarty->clear_cache('index.html');
$smarty->assign("member",$member);
$smarty->display('index.html');
?>
で、テンプレートのほうは
templates/index.html
<html>
<head>
<title>{$member.name}</title>
</head>
<body>
会員番号:{$member.id}<br>
名前:{$member.name}<br>
性別:{$member.sex}<br>
</body>
</html>
と、$smarty->assign で指定した変数{$member}に、ドット(.)をつけて、連想配列のキーの値で参照します。
前のエントリーでは、PHPの変数名とテンプレートの変数名を別にして説明しましたが、実際は同じにしたほうがわかりやすいと思います。
これで表示するアイテムが多い場合でも、少ないコードで済みます。また、表示する項目を、会員情報は$member、ページ情報は$pageのように分けておけば、テンプレートのほうでも、{$member.name} とか {$page.now} と書くので、分かりやすいのではと思います。
あと、PHPのデータベースアクセス関数ではデータベースをselectした結果を連想配列で受け取る関数もあるので、その値をダイレクトにsmartyに渡してあげれば、とってもすっきりとしたコードが書けます。ただ、テンプレートのほうは、おのずとテーブルの列名を書くことになるので、セキュリティ的にはまずいかもしれません(笑)。
2006年02月06日 10:23 | 3.使い方
トラックバック
このエントリーのトラックバックURL:


