TTの自作プラグイン

自作プラグインの置き場を決める。

ここではlib/Myapp/TTというディレクトリを作って、そこにすることにした。

lib/Myapp/View/TT.pm

 __PACKAGE__->config({
    PLUGIN_BASE => 'Myapp::TT',
 }

自作プラグイン(フィルター)を作る

lib/Myapp/TT/Util.pm

 package Myapp::TT::Util;
 
 use strict;
 use base qw/Template::Plugin/;
 
 sub new {
    my ( $class, $context, @args ) = @_;
    $context->define_filter( 'sex', \&sex );
    bless {}, $class;
 }
 
 sub sex {
    #my ( $self, $str ) = @_;
    my $str = shift;
    if ( $str == 1 ) {
        return '男';
    }
    elsif ( $str == 2 ) {
        return '女';
    }
    else {
        return '?';
    }
 }
 1;

テンプレートファイルを書く

以下でmember.sexの値が1なら「男」と表示される。

 <html>
 [% USE Util %]
 性別:[% member.sex | sex %]
 </html>

引数を取るフィルターを作る

動的なフィルターを作る事によって、引数を渡せる。define_filter()に渡す引数に1をつけて、動的である事を示す。

 $context->define_filter( 'jptruncate', \&jptruncate, 1);
 (略)
 sub jptruncate {
     my ($context, $length) = @_;
     $length= -1 unless defined $length;
     return sub {
         my $str = shift;
         Encode::encode('euc-jp',substr(Encode::decode('euc-jp',$str), 0, $length));
     }
 }
 <html>
 [% USE Util %]
 [% long_jp_text | jptruncate 50 %]
 </html>

参考

http://search.cpan.org/~abw/Template-Toolkit-2.19/lib/Template/Manual/Config.pod#Plugins_and_Filters


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2007-05-06 (日) 06:15:03