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:

コメント

コメントしてください




保存しますか?