PHPといわず、Webプログラミングをしていると自分がバカになった気がするのが、print,echo文の羅列。何度も何度も何度もechoを書いていると「もうちょっとなんとかしよーよ。」と思う。
誰もが思うのが、htmlのスケルトン(テンプレート)を変数で埋めてくれるツール。これが世に言うテンプレートエンジン(template Engine)である。この分野は、もう、ネコも杓子もSmartyを使うことが約束のようになっている。
ただ、内部でなにをやっているかは、ここまで大規模だと簡単にはわからない。
小規模なシステムを作る時にincludeするだけで済みそうな、簡単なテンプレートエンジンをずいぶん探した。htmltemplate for PHPを見つけてなかったら、自分でダサいテンプレートエンジンを作っていたに違いない。
著者は、鮎川寛氏、最近はこのプログラムにはかかわりたくないらしく、ライブラリーこそsource forgeにアップされていますが、ドキュメントはご自身のサイト「php開発日誌」はすでになく、webarchive上に残っています。ユーザーは結構いて、あちこちに使い方がアップされている。よく考えられたライブラリーです。今後、私はかなり使いそう。
ものを入手するのは、ここ。 動作に必要なものはhtmltemplate.incだけ。
ライブラリーにふくまれているtest.html,test.phpを動かせば、なに書けばいいのかわかります。ループロジックなどはコメントタグとして書くことになってます。
samletest.php, sampletest.htmlはhtml selectタグの出し方を説明しています。
以下、極めて簡単な使い方ガイド
もっともシンプルなパターン
テンプレートファイル:hoge.html
<html>
<body>
<h1>{val hogehoge}</h1>
</body>
</html>
PHPコード
<?php
require_once(“htmltemplate.inc”);
$val[“hogehoge”] = “立派な人です”;
htmltemplate::t_inclde(“hoge.html”,$val);
?>
1行リスト表示(繰り返しをふくむ)
テンプレートファイル:list.html
<html>
<body>
<h2>{val title}</h2>
<ol>
<!–{each entries}–>
<li>{val entries/item}
<!–{/each}–>
</body>
</html>
PHPコード
<?php
require_once(“htmltemplate.inc”);
$val[“title”] = “好きな魚”;
$val[“entries”] = array(“鮭”,”鯛”,”鰻”,”鮪”,”鯖”);
htmltemplate::t_include(“list.html”, $val);
変数により表示したり、しなかったり
テンプレートファイル:secret.html
<html>
<body>
<h2>秘密の地図</h2>
<!–{def member}–>
<a href=”http://otakara.yume-javea.jp/map.php”>お宝マップ</A>
<!–{/def}–>
</body>
</html>
PHPコード
<?php
require_once(“htmltemplate.inc”);
$val[“member”] = “Y”;
htmltemplate::t_include(“secret.html”, $val);
?>
なお、結果を文字列として受け取るならば、最後の一行を
$rep = htmltemplate::t_buffer(“secret.html”, $val);
とする。
テンプレート以外について
テンプレートの一部がデータによって大幅に変わる場合、””ダブルクオーテーションとヒアドキュメントの利用を考えてみるべきでしょう。
“$hogehoge は素晴らしい”;
$hogehogeに値があれば、置き換わります。
これを{val hogehoge}に代入するという方法があります。