2009-08-16 14 views
4

テンプレートツールキットの.ttファイルで外部のPerlモジュールを呼び出そうとしています。私が使用したいモジュールはUtilで、Util::prettify_dateに電話したいと思います。 Template Toolkitのプラグインインターフェイスを使用してこのモジュールを含めることができました。ロード、新規、およびエラー関数(http://template-toolkit.org/docs/modules/Template/Plugin.html)を設定し、[% USE Util %]を使用します。プラグインなしのテンプレートツールキットで外部モジュールを呼び出していますか?

これはうまくいきますが、プラグインを使わずに PerlモジュールをTemplate Toolkitに挿入する方法があるのだろうかと思っていました。プラグインの主な問題は、オブジェクト指向のすべての関数を作成する必要があることです(つまり、$ selfを最初の引数として受け入れることになります)。これは意味をなさないことです。

答えて

6

[% PERL %]ブロックのモジュールをuseに送信しましたか?

今、私は個人的に、最初の引数を取り除いた後にMyOrg::Plugin::Util->prettify_dateからUtil::prettify_dateに中継するプラグインを書いています。あなたは同様にこれらのメソッドの作成を自動化することができます

my @to_proxy = qw(prettify_date); 

sub new { 
    my $class = shift; 

    { 
     no strict 'refs'; 
     for my $sub (@to_proxy) { 
      *{"${class}::${sub}"} = sub { 
       my $self = shift; 
       return "My::Util::$sub"->(@_); 
      } 
     } 
    } 
    bless {} => $class; 
} 
14

をまた、このようにテンプレートに機能(すなわちサブルーチン)を渡すことができます。

not_plugin.tt

use strict; 
use warnings; 
use List::Util(); 
use Template; 

my $tt = Template->new({ 
    INCLUDE_PATH => '.', 
}); 

$tt->process('not_plugin.tt', { 
    divider => sub { '=' x $_[0]   }, 
    capitalize => sub { ucfirst $_[0]   }, 
    sum  => sub { List::Util::sum(@_) }, 
}); 


 
[% divider(40) %] 
Hello my name is [% capitalize('barry') %], how are u today? 
The ultimate answer to life is [% sum(10, 30, 2) %] 
[% divider(40) %] 


生産予定これは

 
======================================== 
Hello my name is Barry, how are u today? 
The ultimate answer to life is 42 
======================================== 
関連する問題