/bonvhp/webapp/Smarty       [後へ]   [目次へ]   [次へ] ~ [] ~

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 とが、
こうも絡み合うと、いかにもメンテナンスしづらいです。

上記の例で、
プルダウンメニューをやめて、ラジオボタンのリストに変えたい、
程度の変更でも、滅入ってしまいます。

では、次のセクションで、
この状態を解消する方法について説明します。
/bonvhp/webapp/Smarty       [後へ]   [目次へ]   [次へ]