4

テンプレートを含めるときに実行され、テンプレートへのパスを変更できるフックのタイプはありますか?

例えば

[% INCLUDE test %]

そして、「test」へのパスを「AE/test.tt」や「FR/test.tt」のように変更したいと考えています。


アイデアは、インクルードが配置されているテンプレートを変更せずに、テンプレートへのパスを変更することです。

4

2 に答える 2

5

これを行う通常の方法は、オブジェクトINCLUDE_PATHを作成するときにパラメーターを使用することです。Template

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

新しいインスタンスを構築するTemplateことは大したことではないので、テンプレートを処理しようとしているときはいつでもその場で新しいインスタンスを作成しない強い理由はありませんが、永続的な環境にいて、本当にパフォーマンスが必要な場合、複数を作成するオプションが常にあります。

my %tt;
$tt{ae} = Template->new({INCLUDE_PATH => 'AE'});
$tt{fr} = Template->new({INCLUDE_PATH => 'FR'});
# ... code ... code ... code ...
$lang = 'ae';
# ... code ... code ... code ...
$tt{$lang}->process($template_name);
于 2012-07-03T11:13:04.687 に答える
2

これは次の例のように可能だと思いますTemplate:

[% mytest = 'AE/test.tt' %]
[% INCLUDE  $mytest  %]           # 'AE/test.tt'

ここではテストされていません。

http://template-toolkit.org/docs/manual/Directives.html#section_INCLUDEを参照してください。

于 2012-07-03T09:38:34.857 に答える