Как определить константы в шаблоне Template Tookit в приложении Catalyst? - PullRequest
2 голосов
/ 06 июня 2009

Я хочу использовать константу в моем шаблоне TT. В HTML :: Mason (мой предыдущий шаблонизатор) я мог сделать:

<%once>
use MyApp::Constants qw(CONSTANT);
</%once>

Как я могу сделать это в Template Toolkit ? Как уже упоминалось в заголовке, это приложение Catalyst , поэтому я подумал, что могу поместить константы в тайник, но это выглядит немного неловко.

- редактирование

Извините - я должен был упомянуть, что хочу использовать свои собственные константы - экспортированные из MyApp :: Constants, без дублирования.

Ответы [ 2 ]

4 голосов
/ 07 июня 2009

В вашей конфигурации TT вы можете использовать опцию VARIABLES для передачи списка значений, которые будут переданы каждому шаблону при его обработке. Используя некоторую хитрость таблицы символов, вы можете высосать все свои константы в конфигурацию:

use MyApp::Constants;
use Template;


my $tt;     # template object
{ 
    no strict 'refs';
    $tt = Template->new( { 
        VARIABLES => { map { $_ => &{ 'MyApp::Constants::' . $_ } } 
                       grep { defined &{ 'MyApp::Constants::' . $_ } }
                       keys %MyApp::Constants::
                     }
        }
    )
}

Он просматривает все символы в пакете MyApp::Constants, проверяет, определены ли они как подпрограммы (это то, что constant.pm делает под капотом), а затем использует map для предоставления их хэш-функции для TT.

2 голосов
/ 06 июня 2009

Несколько возможностей. Просто определите некоторые переменные:

[% users = {
     tom   => 'Thomas',
     dick  => 'Richard',
     larry => 'Lawrence',
   }
%]

[% FOREACH u IN users %]
   * [% u.key %] : [% u.value %]
[% END %]

Используйте глобальную переменную:

[% global.version=1.234 %]

This is Version [% global.version %].

Директива META позволяет просто элементы метаданных, которые должны быть определены в шаблон. Они оцениваются, когда шаблон анализируется и как таковой может содержат только простые значения (например, это невозможно интерполировать другие значения переменных в переменные META).

[% META
   title   = 'The Cat in the Hat'
   author  = 'Dr. Seuss'
   version = 1.23 
%]

Как вы уже упоминали в теле вопроса, есть также следующее: http://template -toolkit.org / документы / ручной / Variables.html # section_Compile_Time_Constant_Folding

...