2012-07-03 55 views
4

当我包含一个模板并且可以在其中更改模板的路径时,是否会执行一些钩子类型?模板工具包包含钩子?

例如

[% INCLUDE test %] 

而且我希望到路径更改为“测试”是像“AE/test.tt”或“FR/test.tt”。


这个想法是改变模板的路径而不改变包含的模板。

回答

5

这样做的正常方式是构建你的Template对象时使用INCLUDE_PATH参数:

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); 
+0

10倍,这可能工作,因为我可以通过一个子到INCLUDE_PATH(我用的舞者和我用的是内置的模板引擎处理)。据我所知,没有任何类型的钩子,这可以让我改变模板名称或任何类型的内置别名功能(例如,传递散列的位置和包含INCLUDE以使用将模板名称作为关键字并将值作为模板的真实路径),对吗? – bliof

+0

我不知道有任何挂钩或别名功能,没有。 –