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の設計などもシンプルでなければならず、これが結果としてあとあと拡張性がよりたかくできるなど、一石二鳥の面もあるのでおすすめだ。

RSS
Add to Google

カスタム検索
ソフトウェア&ライブラリ


ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2009年10月
« 9月   11月 »
 1234
567891011
12131415161718
19202122232425
262728293031  
アーカイブ
にほんブログ村 IT技術ブログへ