HTML::Template 2.8 Release でHTML::Template::Plugin::Dotを再テスト
HTML::Templateのバージョン2.8がリリースされました。
いくつか変更点はあるのですが、
- Bug Fix: Changed HTML::Template to help sub-classes by called _new_from_loop() via ref($self) rather than hard-coding the package name. [Mark Stosberg]
とある通り、HTML::Templateとハードコーディングされているところがなくなって、サブクラスが作りやすくなってます。んで、このpatchを出していたMark Stosbergさんが作っているHTML::Template::Plugin::Dotが正しく使えるようになってます。
以前試した時は、HTML::Templateにpatchをあてるか、メソッドを上書き必要がありました。
サンプルはあまり面白くないのでソースだけで、
CGI::Appベースのアプリケーションで
sub dispatch_index{ my $self = shift; $self->stash->{test}="sample data"; $self->stash->{tags}=[ {tag=>'foo',fsize=>10}, {tag=>'bar',fsize=>18}, {tag=>'baz',fsize=>14} ]; my $tmpl=$self->tmpl_plugindot_load( 'index.tmpl.html', die_on_bad_params=>0, loop_context_vars=>1, associate=>$self->query ); $tmpl->param('c',$self); return $tmpl->output; }
こんなようなrun_modeを作成。
stashはCGI::Application::Plugin::Stashを利用してます。
tmpl_plugindot_loadはCGI::Application::Plugin::HTDotが使いにくいので適当にでっちあげたプラグインのメソッド。
テンプレートは、
<h2><!-- TMPL_VAR NAME=c.stash.test ESCAPE=HTML --></h2> <!-- TMPL_LOOP NAME=c.stash.tags:tag --><!-- TMPL_IF NAME=__FIRST__ --><ul> <!-- /TMPL_IF --><li style="font-size:<!-- TMPL_VAR NAME=tag.fsize ESCAPE=HTML -->pt;"><!-- TMPL_VAR NAME=tag.tag ESCAPE=HTML --></li> <!-- TMPL_IF NAME=__LAST__ --></ul><!-- /TMPL_IF --><!-- /TMPL_LOOP -->
こんな感じで、実行すると。
<h2>sample data</h2> <ul> <li style="font-size:10pt;">foo</li> <li style="font-size:18pt;">bar</li> <li style="font-size:14pt;">baz</li> </ul>
こう想定通りなりました。
うまく動いたけど、 これを使う機会はなかなかないだろうなぁ。。。