PHPのテンプレートエンジン Smarty には foreachelse という便利な構文があります。
{ foreach from=$item_loop key="key" item="value"} id: {$value.id} {foreachelse} データがありません {/foreach}
これをTemplateToolkitで実現するには
[%FOREACH value=itemloop%] id:[%value.id%] [%END%] [%UNLESS itemloop.0%]データがありません[%END%]
と記述します。
HTML::Fillinformは有名ですが、TTで使えるプラグインがあるみたいです。
http://search.cpan.org/~miyagawa/Template-Plugin-FillInForm-0.04/
[% USE TagRescue %]と最初に書いて
[% FILTER html_except_for('b') -%]
Bold! and Italic!
[%- END %]
# Output:
# Bold! and Italic!
[% 'Bold! and Italic!
' | html_except_for('i','br') %]
# Output:
# Bold! and Italic!
[% taglist = ['b', 'br']; 'Bold! and Italic!
' | html_except_for(taglist) %]
# Output:
# Bold! and Italic!
【Template-Toolkit】(以下TT)をメインで使っていても、サーバ上のPerlのバージョンが低いとどうしても【HTML::Template】を使わざるをえなくなるときがある。
逆に普段【HTML::Template】だがTTの方が便利だという噂を聞いて使ってみたいという人がいるかもしれない…。
という事で TT <-> HTML::Template のテンプレートファイルの変換方法。
■1.変数
TTのテンプレートファイル内での変数記述方法は
[%data%]
HTML::Templateのテンプレートファイル内での変数記述方法は
%data%
簡単。(両サイドのカッコをトルだけ)
(※注 HTML::Template をnew するときに『vanguard_compatibility_mode => 1』とする必要がある。)
■2.ループ
TTのテンプレートファイル内でのループ記述方法は
[%FOREACH value=itemloop%] [%value.data%] [%END%]
HTML::Templateのテンプレートファイル内でのループ記述方法は
<!--tmpl_loop name="itemloop"--> %data% <!--/tmpl_loop-->
簡単!。
■3.条件分岐
HTML::Templateの条件分岐は値が「TRUE」か「FALSE」しか判断できないので
TTでこれ以外の条件分岐を行っているときはあきらめる。。。
「TRUE」「FALSE」でのみ条件分岐を行っているときは
TTのテンプレートファイル内での条件分岐記述方法は
[% IF file_1 != '' %] <img src="[%file_1%]"> [% END %]
HTML::Templateのテンプレートファイル内での条件分岐記述方法は
<!--TMPL_IF NAME="file_1"--> <img src="%file_1%"> <!--/TMPL_IF-->
Template-Toolkit(以下TT)での
一般的なループのさせ方は
[%FOREACH value=loop%] 名前は:[%value.name%]です。 [%END%]
このループのループ回数を利用して何か処理をしたい場合は予約オブジェクト「loop」というのが使用できる。
loop.size リストの要素数
loop.max 最後の要素のインデックス (size - 1)
loop.index 0からmax()のうちの、現在の繰り返し処理のインデックス
loop.count 1からsize()のうちの、現在の繰り返し処理のカウント(index() + 1)
loop.first 現在の処理が一番最初の処理であれば真
loop.last 現在の処理が一番最後の処理であれば真
loop.prev リストのうち、一つ前のアイテムを返す
loop.next リストのうち、一つ次のアイテムを返す
では、この変数を用いて「3回繰り返すごとに改行タグを入れる」といった
処理はどう行うかというと
[%FOREACH value=loop%] 名前は:[%value.name%]です。 [%IF (loop.count mod 3)==0 %]<br>[%END%] [%END%]
※注意
○ [%IF (loop.count mod 3)==0 %] × [%IF (loop.count%3)==0 %]
なので注意。
便利なプラグイン:
Template::Plugin::TruncateJp
http://search.cpan.org/search?query=TruncateJp&mode=all
Template::Plugin::Filter::HTMLScrubber
Template::Plugin::Clickable
なお文字列の連結はダブルクォーテーションでかこう。
[%hoge%]-----[%fuga%] ↓ [% "$hoge-----$fuga" %]
ダウンロードはThe CPAN Search Site - search.cpan.orgからどうぞ
参考:
(フィルタ機能一覧)http://www.template-toolkit.org/docs/default/Manual/Filters.html
(配列へのアクセス)http://www.drk7.jp/MT/archives/000867.html
参考:http://cyberlib.enterbrainz.com/1167736804.html