Smarty:埋め込み言語の難点
●簡単な実例から
ある程度の規模の WEB アプリを作ろうとすると、
面倒になる理由についてです。
分かりやすいように、
ここでは非常に簡単なコードで見てみましょう。
お題は、
・1行の文字列がひとつ。
・プルダウンメニューがひとつ。
・文字列の内容と、メニューの選択肢は、可変。
# 一般にありがちな、
# 選択肢の内容自体をデータベースから読み込むパターンです。
●基本形を HTML で書くと...
お題では、リストの中身が可変なので、
HTML だけでは記述できませんが、
比較して分かりやすいように、
仮にリストの内容が決まっているとしたら、
以下のようになります。
<html>
<body>
List title:
</select>
<select name="list">
<option value="1">red</option>
<option value="2">green</option>
<option value="4">blue</option>
<option value="7">white</option>
</select>
</body>
</html>
見た目は、以下のようです。
List title:
●PHP で書くと...
次に、お題通り、PHP で書いてみます。
<?php
$title = "List title:";
$list = array(1=>'red', 2=>'green', 4=>'blue', 7=>'white');
?>
<html>
<body>
<?php echo $title; ?>
<select name="list">
<?php
foreach($list as $key=>$str) {
echo "<option value=\"$key\">$str</option>";
}
?>
</select>
</body>
</html>
ここでも分かりやすいようにデータを固定していますが、
実際には、データベースにアクセスして、
$title や $list を動的に作成しているとお考えください。
$list の要素数が動的に変わるので、
foreach 文で options の行を列挙しています。
こんな簡単な見た目でさえ、ややこしいコードになりました。
●なぜややこしいのか...
もう一度、上記 PHP のリストを見ましょう。
最初は PHP のコードでデータを用意して、
次に HTML で body などを書き、、
PHP echo 文でタイトルを表示して、
HTML の select が来て、
また PHP の foreach があって...
挙句、option の部分は、HTML と PHP が一体です。
そう、HTML と PHP が入り混じっています。
HTML 埋め込み型言語なので、当り前なのですが、
データを制御する PHP と、
見た目を担当する HTML とが、
こうも絡み合うと、いかにもメンテナンスしづらいです。
上記の例で、
プルダウンメニューをやめて、ラジオボタンのリストに変えたい、
程度の変更でも、滅入ってしまいます。
では、次のセクションで、
この状態を解消する方法について説明します。