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 |
|