HTML::Template で LOOP の中で VAR NAME="hoge" を呼び出す方法
HTML::Template
CGIでサイト作るときなど、よく使わせてもらっています。
HTML::Template
例えば
$template->param(EMPLOYEE_INFO => [ { name => 'Sam', job => 'programmer' }, { name => 'Steve', job => 'soda jerk' }, ] );
こういうデータ構造を作ると
<TMPL_LOOP NAME=EMPLOYEE_INFO> Name: <TMPL_VAR NAME=NAME> <br> Job: <TMPL_VAR NAME=JOB> <p> </TMPL_LOOP>
こんな感じで、書くことができます。
結果は
Name: Sam Job: programmer Name: Steve Job: soda jerk
こんな感じ。
やりたかったこと
このLOOPの中で、配列"EMPLOYEE_INFO"とは全く関係ない変数を呼び出したかった。
こんな感じ
$template->param(EMPLOYEE_INFO => [ { name => 'Sam', job => 'programmer' }, { name => 'Steve', job => 'soda jerk' }, ] ); $template->param(TEST => "test");
こういうデータ構造で、
<TMPL_LOOP NAME=EMPLOYEE_INFO> <TMPL_VAR NAME=TEST> Name: <TMPL_VAR NAME=NAME> <br> <TMPL_VAR NAME=TEST> Job: <TMPL_VAR NAME=JOB> <p> </TMPL_LOOP>
こういうこと
ところがこれが動かない・・・。
なぜだ・・・。
の内側では、 から利用できる変数だけが入ります
このLOOPとは一つのスコープのような扱いらしいです。
つまり、LOOPという構造の中に、別のスコープの変数は来るな、ってことですね。
そこで、このLOOPの中にLOOP以外の変数を呼び出したい場合は、変数をグローバル化しなければなりません。
それをするには
my $template = HTML::Template->new(filename =>'test.tmpl', global_vars => 1);
こんな風にすればOK。
勉強になりましたm(_ _)m