まだまだPerl5.6以下の環境では使う事が多い、HTML::Template。
少しでも開発効率を上げるためにプラグインを調べてみる。
◎HTML::Template::Ex <TMPL_EX>perlコード</TMPL_EX> という書き方ができる。 <TMPL_SET NAME='...' value='...'> で値のセットが可能 (TMPL_VAR で参照できる)。 TMPL_LOOP で参照可能な TMPL_SET も可能。 <TMPL_VAR NAME="env_http_referer"> などと環境変数の参照が可能。 ◎HTML::Template::Expr TMPL_IF で真偽以上の判定が可能。 <TMPL_IF EXPR="banana_count > 10">ほげ</TMPL_IF> TMPL_VAR で値の加工が可能。 <TMPL_VAR EXPR="sprintf('%d', foo)"> 関数が使用可能 <TMPL_IF EXPR="myfunc('hoge')"> myfunc の中で TMPL_VAR は使えるのか? ◎HTML::Template::HTX ◎HTML::Template::HashWrapper param で指定するのではなく、new で全パラメータを 指定できるようにする。
参考:http://68user.blog27.fc2.com/blog-entry-28.html
【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-->
文字コードをUTF8にするフィルターをかます場合
use strict; use HTML::Template; use Jcode; my $t = HTML::Template->new( filename => 'my.t', filter => sub { Jcode::convert(shift,'utf8') }, );
だそう。便利。
詳しくはこちら:http://d.hatena.ne.jp/charsbar/20051229/1135864604