HTML::Template(4) TMPL_IF

HTML::Template のテンプレートタグの勉強です。
今回は、テンプレートの中で条件分岐をする為の <TMPL_IF> タグについて勉強します。


使い方は http://d.hatena.ne.jp/palmo/20060715/htmpl3:TMPL_LOOP とほとんど同じで、NAME 属性で「条件」として使う値を指定します。指定した条件の値は、Perl と全く同じように真偽判定されます。例えば「空の文字列」や「数字の 0」、「未定義(undef)」だったりすると「偽」、それ以外なら「真」として判定されるわけですね。
条件が真として判定された場合、<TMPL_IF> という開始タグと、</TMPL_IF> という終了タグで挟みこんだ部分が表示されます。逆に、偽になった場合は全く表示されません。
例えば、このようなテンプレートを書いたとして

<TMPL_IF NAME="TITLE">
  <h1><TMPL_VAR NAME="TITLE"></h1>
</TMPL_IF>

Perl スクリプト側で、param メソッドを使って「TITLE」の値を設定すると

$tmpl->param( TITLE => "Hello, world!" );

TMPL_IF の条件は「真」として判定されるので、TMPL_IF の中身が表示されて

  <h1>Hello, world!</h1>

と出力されます。
逆に TITLE に何も設定しなかったり、TITLE に「偽」として判定される値を設定すると、何も表示されなくなります。
また、条件の真偽を逆にする「TMPL_UNLESS」も存在するので、「値が無い場合」にだけ出力する、という事も可能ですね。(^_^)


さらに、「TMPL_ELSE」も存在します。Perl での if 文と同じく、条件が「偽」であった場合に出力されます。TMPL_IF で挟んだ部分の中で使う事ができます。

<TMPL_IF NAME="VALUE">
  <p>あなたが入力したのは「<TMPL_VAR NAME="VALUE">」です。</p>
<TMPL_ELSE>
  <p>入力してください。</p>
</TMPL_IF>

VALUE」として設定した値が「真」だった場合は、その値を表示しますが、「偽」だった場合は「入力してください」と表示します。


とっても簡単ですね。条件分岐ができれば、テンプレートの表現の幅も広がるはずです。
HTML::Template を利用して、今度は少し実用的な CGI スクリプトを作ってみたいと思います。(^_^)