HTML::Template メソッドリファレンス
HTML::Templateの記事に手を入れていたら、 長くなったので分割。こっちはメソッド関係。
(2013/07/21追記)newに指定できるencode系オプションについて追記。
new()
新しいテンプレートオブジェクトを作る。
# ファイル名でも $tpl = HTML::Template->new(filename => 'template.html'); # テンプレートを格納した変数へのリファレンス $template_text = "(テンプレート)"; $tpl = HTML::Template->new(scalarref => \$template_text); # テンプレートを格納した配列へのリファレンス open FH, '<', 'template.html'; @template = <FH>; close FH; $tpl = HTML::Template->new(arrayref => \@template); # ファイルハンドルでも。 open $fh, '<', 'template.html'; $tpl = HTML::Template->new(filehandle => $fh);
それぞれ、以下のような別名も
$tpl = HTML::Template->new_file('template.html');
$tpl = HTML::Template->new_scalar_ref(\$template_text);
$tpl = HTML::Template->new_array_ref(\@template);
$tpl = HTML::Template->new_filehandle($fh);
各ソースタイプ共通で、これもOK
$tpl = HTML::Template->new(
type => 'filename',
source => 'template.html',
);
オプションは、かなりいろいろあります。 よく使うものを紹介。
associate
他のオブジェクトから、パラメータ値を継承する。 CGI.pmのqueryオブジェクトを継承すると便利。
my $query = CGI->new();
# (入力内容のチェックとかをして...)
# 出力
my $template = HTML::Template->new(
filename => "filename.tpl",
associate => $query,
);
# フォーム等から受け取った各変数について、
# $template->param( '変数名', $query->param('変数名') );
# を実行済みであるかのように動く。
$template->output;
die_on_bad_param
0を指定すると、テンプレートにない変数名でもparamを呼び出せる。デフォルトは1(呼び出せない)。
strict
0を指定すると、TMPL_*タグのように見えるがタグで無いものを、単に無視する。デフォルトは1(エラーになる)。
utf8
テンプレートをファイル名で渡す時、このオプションに1を指定すると、テンプレートファイルをutf8として読み込んでくれる。
プログラムでuse utf8;している時に使おう。
(当たり前ですが)スカラーやオープン済みのファイルハンドルを渡す場合は、自分でencodingの面倒を見なければならない。
open_mode
プログラムでuse utf8;したいのに、テンプレートファイルはutf8以外の文字コードで書かれているという時に。
my $template = HTML::Template->new( filename => 'templatefile.html', open_mode => '<:encoding(euc)', );
こちらも、テンプレートをファイル名渡しする時用。
case_sensitive
trueを指定すると、テンプレートの変数名の大文字・小文字を区別する。デフォルトはfalse(区別しない)。
loop_context_vars
trueを指定すると、4つのループ・コンテキスト変数
「__first__」「__last__」「__inner__」「__odd__」と、
行カウンター「__counter__」を使えるようになる。デフォルトはfalse(使えない)。
<TMPL_LOOP NAME="FOO">
この部分は、普通のループなので、毎回出力される。
ループ回数を「<TMPL_VAR NAME="__counter__">」で出力できる。
<TMPL_IF NAME="__first__">
この部分は、ループの最初の回だけ出力される。
</TMPL_IF>
<TMPL_IF NAME="__odd__">
この部分は、ループの奇数回だけ出力される。
</TMPL_IF>
<TMPL_UNLESS NAME="__odd__">
この部分は、ループの偶数回(奇数回のUNLESS)だけ出力される。
</TMPL_IF>
<TMPL_IF NAME="__inner__">
この部分は、ループの最初と最後以外、毎回出力される。
</TMPL_IF>
<TMPL_IF NAME="__last__">
この部分は、ループの最後の回だけ出力される。
<TMPL_IF>
</TMPL_LOOP>
ループが1回だけの場合、firstとlastは出力され、innerはスキップされる。
max_includes
テンプレートの差込が行える深さを指定。 指定数を超えて差し込もうとするとエラーになる。 0を指定すると、深さチェックを行わない。デフォルトは10。
no_includes
1を指定すると、テンプレートの差込を行わない(TMPL_INCLUDEを無効に)。デフォルトは0(差込を行う)。
global_vars
1を指定すると、ループの中でも、ループ外で指定した変数を使えるようにする。デフォルトは0(使えない)。
[ ページ先頭へ ]
output()
テンプレートの最終結果を返します。
# そのまま出力してもいいし print $tpl->output(); # 結果をさらに何か加工するなら my $result = $tpl->output();
[ ページ先頭へ ]
param()
テンプレートに差し込む値を設定します。
個人的には、もっぱらnew時のassociateで値を入れているので、使用頻度低めです。
# TMPL_VARで出力するデータ
$template->param('変数名' => '値');
$template->param('変数名' => 値を返すサブルーチンへのリファレンス );
# TMPL_LOOPで出力するデータは、配列のリファレンスとして
$template->param('ループパラメータ名' =>
[
{ 'ループ内変数名' => '値', ... },
{ 'ループ内変数名' => '値', ... },
]
);
# 複数の値をまとめて指定
$tamplate->param(
'変数名1' => '値1',
'変数名2' => '値2',
'ループパラメータ名1' =>
[
{ 'ループ1内変数名' => '値', ... },
{ 'ループ1内変数名' => '値', ... },
],
'ループパラメータ名2' =>
[
{ 'ループ2内変数名' => '値', ... },
{ 'ループ2内変数名' => '値', ... },
]
);
# 変数=>値を格納したハッシュを指定
$template->param(\%values);
現在設定済みの値などを取得することもできます。 こっちはほぼ使ったことない感じ...。
# テンプレートの変数名リストを取得
my @parametar_names = $template->param();
# 設定された値を返す
my $value = $template->param('変数名');
[ ページ先頭へ ]
clear_params()
テンプレートのすべての変数をundefに設定します。
これも、あんまり使ったことないです...。
[ ページ先頭へ ]
query()
テンプレート構造の情報を取得。
# テンプレートにパラメータがあるかどうか確認
if ( $template->query(name => '変数名') ) {
# 変数あり
}
# パラメータタイプを確認
if ( $template->query(name => '変数名') eq "VAR" ) {
# 普通の変数
}
elsif ( $template->query(name => '変数名') eq "LOOP" ) {
# ループ
}
TMPL_IF, TMPL_UNLESSは、TMPL_LOOPで使われている名前なら「LOOP」を、そうでなければ「VAR」を返す。
リストコンテキストでは、LOOPの内側のパラメータリストを返す。 ループがネストしている場合も、再帰的にすべてのパラメータを参照できる。
名前はすべて小文字で、タイプは大文字で返される。
[ ページ先頭へ ]
参照
perldoc.jp HTML::Templateドキュメント和訳
最終更新日:2013/07/21
[ ページ先頭へ ]