* TTの自作プラグイン [#x3b47d67]
** 自作プラグインの置き場を決める。 [#q0a73d5c]
ここではlib/Myapp/TTというディレクトリを作って、そこにすることにした。
lib/Myapp/View/TT.pm
__PACKAGE__->config({
PLUGIN_BASE => 'Myapp::TT',
}
** 自作プラグイン(フィルター)を作る [#neb1cc85]
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;
** テンプレートファイルを書く [#jf1e48d6]
以下でmember.sexの値が1なら「男」と表示される。
<html>
[% USE Util %]
性別:[% member.sex | sex %]
</html>
** 引数を取るフィルターを作る [#gff0c167]
動的なフィルターを作る事によって、引数を渡せる。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>
** 参考 [#td9a265e]
http://search.cpan.org/~abw/Template-Toolkit-2.19/lib/Template/Manual/Config.pod#Plugins_and_Filters