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>
                                 こう想定通りなりました。
うまく動いたけど、 これを使う機会はなかなかないだろうなぁ。。。