* 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

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