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