



テンプレートを使用したHTMLページの動的生成
長所
・テンプレート内の埋め込み変数に普通の文字列($FOO または ${FOO})を使うので、編集が容易でレイアウトに影響を及ぼしにくい。
短所
・埋め込み変数にループする要素を出力したいとき(テーブルに不定個数の行を出力したい、等)に別テンプレートを用意しなければならず、且つ、値の代入が面倒。
上記の長所・短所は、HTML::Template の特徴と逆なので、理想的には使い分ける(ループ要素だけHTML::Templateを使う)とよいがかも?
テンプレートの形式
HTMLファイル内の動的生成をしいたい場所に、埋め込み変数 $FOO または ${FOO} を記述する。変数名は[A-Z0-9_]にマッチする文字で構成する。それ以外の文字を使用するときは、{}必須。
不定個数の要素を出力したい箇所は、埋め込み変数を1個だけ書いて、繰り返し出力する内容を別ファイルで用意する。
例えば:
<!--- main.tpl --->
<table>
$ROWS
</table>
<!--- rows.tpl --->
<tr>
<td>$COL1</td>
<td>$COL2</td>
</tr>
使い方:
use CGI::FastTemplate;
my $tpl = new CGI::FastTemplate('/path/to/template');
// テンプレートファイル参照の定義
$tpl->define(main => 'main.tpl', rows => 'rows.tpl');
// 埋め込み変数に値を代入。
// ハッシュリファレンス(\%foo)を使って一気に代入することも可能。
$tpl->assign(TITLE => 'my page');
$tpl->assign(VAR1 => 'content1');
// 繰返し要素を代入するには、子テンプレートの埋め込み変数に値を代入した後、
// 子テンプレートファイル参照名に"."を付けたものをソース、親テンプレートの
// 埋め込み変数をターゲットにしてparseする。
while (...) {
$tpl->assign(COL1 => $value1);
$tpl->assign(COL2 => $value2);
$tpl->parse(ROWS => '.rows');
}
// 最終出力を得るには、テンプレートファイル参照名をソース、組込変数MAINを
// ターゲットにしてparseする。
// 複数のテンプレートファイルがあるならば、全てのテンプレートをMAINにparseする。
$tpl->parse(MAIN => ['main','rows'];
// 最終結果を出力する。
$tpl->print();その他のメソッド(主なもの):
$tpl->strict();
値が代入されなかった埋め込み変数に関する警告を出力する(デフォルト)。
$tpl->nostrict();
上記の警告を出力しない。
my $contents = $tpl->fetch('MAIN');
'MAIN'にparseされた結果への参照を取得する。結果そのものを取得しない事に注意。