модификация шаблона ТТ - PullRequest
1 голос
/ 15 декабря 2010

Можно ли легко изменить шаблон (Template Toolkit) при его загрузке, прежде чем он будет кэширован как код Perl? Я хочу запустить на нем регулярное выражение.

Ответы [ 2 ]

5 голосов
/ 15 декабря 2010

Вы можете предоставить свой собственный Template :: Provider , который подклассов стандартного. Из прекрасного руководства:

Template :: Provider используется для загрузки, анализа, компиляции и кэширования документов шаблона. это объект может быть разделен на подклассы, чтобы обеспечить более конкретные возможности для загрузки, или иным образом предоставление доступа к шаблонам.

Итак, это должно быть довольно легко, но легко , конечно, сильно зависит от вашего умения.

4 голосов
/ 15 декабря 2010

Предложение Template :: Provider, приведенное выше, вероятно, является лучшим способом сделать это.Но есть и более простой (хотя и немного хакерский) подход.Вы можете прочитать шаблон в скаляр и выполнить любые преобразования на нем, какие захотите, прежде чем передавать его в процессор шаблонов.

my $tt = Template->new;

open my $template_fh, '<', 'template.tt' or die $!;
my $template = do { local $/; <$template_fh> };

$template =~ s/some regex/some replacement/;

my $vars = { template => 'variables' };

$tt->process(\$template, $vars) or die $tt->error;

Секрет в том, что метод process () принимает различные типы значений в качествеПервый параметрЕсли вы дадите скаляр, то это будет имя файла, содержащего шаблон.Но если это ссылка на скаляр, то предполагается, что этот скаляр содержит фактический шаблон.Подробнее см. в документации .

...