Доступ к хешам в шаблонах Perl - PullRequest
0 голосов
/ 20 февраля 2012

Как получить доступ к переменным в хэше при использовании модуля Perl HTML::Template?

Я строю следующий хэш в своем коде Perl:

# Load success/error flash messages
if ($query->param("submit")) {
  $template->param(
    FLASH => {
      CLASS => "success",
      MESSAGE => "Your cart has been successfully updated!"
    }
  );
}

Я хотел бы получить доступ к этим переменным в моем шаблоне.Чтобы получить доступ к обычной переменной, вы должны:

<TMPL_VAR NAME=FLASH>

Как мне получить доступ к FLASH ['CLASS'] в моем шаблоне?

Ответы [ 3 ]

2 голосов
/ 20 февраля 2012

Доступ с. (Точка)

FLASH.CLASS

1 голос
/ 04 июня 2012

HTML :: Шаблон всегда нуждается в хэше массивов хэшей массивов и так далее. Если у вас произвольная структура данных, вы можете попробовать HTML :: Template :: Compiled, где вы можете использовать точечный синтаксис (отказ от ответственности: я автор)

Существует также HTML :: Template :: Plugin :: Dot, но я никогда не проверял его, и он кажется немного более ограниченным.

1 голос
/ 20 февраля 2012

В документации нет ничего, что указывало бы на то, что вы можете установить параметр в качестве хэш-ссылки. Самое близкое к тому, что вы хотите сделать, это поместить хеш-ссылку в arrayref:

$template->param(
    FLASH => [ {
        CLASS => "success",
        MESSAGE => "Your cart has been successfully updated!"
    } ]
);

Тогда вы можете получить к нему доступ:

<TMPL_LOOP NAME=FLASH>
  <TMPL_VAR NAME=CLASS>
  <TMPL_VAR NAME=MESSAGE>
</TMPL_LOOP>

Но иметь массив с одним элементом может быть излишним. Альтернатива состоит в том, чтобы избавиться от hashref и выровнять структуру:

$template->param(
    FLASH.CLASS   => "success",
    FLASH.MESSAGE => "Your cart has been successfully updated!"
);

...

<TMPL_VAR NAME=FLASH.CLASS>
<TMPL_VAR NAME=FLASH.MESSAGE>
...