Archive for 2009/10/10
かなり以前ですが、HTML_Template_Sigmaを紹介しました(こちら)が、
ここで、HTML_Template_Sigmaがユニークで使えるテクニックとして、
「テンプレートから使われている変数を取得する」
というテクニックがあります。
これを使うと具体的にどのようなことができるかといえば、
テンプレートを変更すると、プログラムの動きを変えるなんてこともできます。
あまり、劇的にやってしまうとテンプレートとプログラムをわける意味がないのですが、
たとえば、一覧表を表示したいときに「フィールドを追加したいなー」とか、どの項目を表示するかは、
実装時には決められない。
なんてことがある。
この時、テンプレートで処理できればなーなどと思ったことはないだろうか?
Smartyなどのテンプレートの場合、テンプレートにどのような出力がされるかはプログラムからはわからない。まあ、このような類のテンプレートの仕組みは私が知る限りは、このHTML_Template_Sigmaしかしらない。
(私はJavaもしくはPHPぐらいしかWEBアプリをつくらないので、それ以外の言語はしらないのだが・・・)
では、HTML_Template_Sigmaでは実際にどのように記述するのだろうか?
たとえば
<table>
<!-- BEGIN LIST -->
<tr>
<td>{fld_id}</td>
<td>{fld_title}</td>
</tr>
<!-- END LIST -->
</table>
のようなテンプレートがある。ここで、表示したい項目は
{fld_id}
{fld_title}
だ。
では、この値をプログラムからはどのように取得するかといえば、
$tmpl = new HTML_Template_Sigma();
: (途中省略)
$vars = $tmpl->getPlaceholderList("LIST");
foreach($key as $vars){
// $row はテーブルなどから取得した値の配列
if(substr($key,0,4) == "fld_"){
$value = $row[$key];
$tmpl->setVariable($key,$value);
}
}
などのようにできる。
わざわざ、”fld_”というprefixをつけたのは、ここはフィールドとして自動的に取得していいよという感じのためだ。
このようなことができるとかなり汎用的なテーブル表示の処理が記述できるようになる。
また、このように変化に対応できるようなテンプレートであることを維持するためには、DBの設計などもシンプルでなければならず、これが結果としてあとあと拡張性がよりたかくできるなど、一石二鳥の面もあるのでおすすめだ。

