Створення об'єкта

Для роботи з шаблоном необхідно спочатку створити об'єкт, який описує
вибраний шаблон. виконується за допомогою виклику оператора
new. При цьому шаблон може зберігатися як у файлі (ключ
filename, Найбільш часте застосування), в скалярної змінної (ключ
scalarref, При цьому передається посилання на об'єкт) і в масиві рядків
(Ключ arrayref, Також використовується посилання на список). Крім
перерахованих ключів, можуть використовуватися і додаткові, які
забезпечують більш точну настройку поведінки об'єкта.


Ось приклад створення об'єкта з шаблону знаходиться у файлі
template.tmpl, При цьому задається, що імена шаблонів будуть
чутливі до регістру літер:

my $ template = HTML:: Template-> new (filename => "template.tmpl",
case_sensitive => 1);

Якщо в системі встановлена змінна середовища $HTML_TEMPLATE_ROOT,
і при шаблон заданий відносним ім'ям файлу, то до імені буде додано
значення $HTML_TEMPLATE_ROOT.

Отримання результату


Для отримання заповненого шаблону просто викличте функцію output
для потрібного об'єкту. При цьому повертається згенерований текст. При цьому
стан об'єкта шаблону не змінюється.


Оскільки дуже часто результат роботи записується у файл, то для того,
щоб зменшити завантаження, ви за допомогою параметра print_to можете
передати функції output дескриптор файлу, в який буде відбуватися
видача результатів. Наприклад, ось так:

$template->output(print_to => *STDOUT);

Вставка змінних


Для вставки даних у шаблон необхідно заповнити його за допомогою функції
param. Функції param передається хеш даних у вигляді ключ
=> Значення
. Для складних структур даних, наприклад для вкладених циклів,
значенням можуть бути посилання на списки та інші хеш-кодування. Ось приклад простого
використання модуля:

use HTML::Template;
# Відкриваємо файл із шаблоном
my $ template = HTML:: Template-> new (filename => "test.tmpl");
# Заповнюємо шаблон параметрами
$ Template-> param (HOME => $ ENV {HOME}, PATH => $ ENV {PATH});
# Посилаємо заголовок Content-Type
print "Content-Type: text/html

";
# Видаємо готовий результат
print $template->output;


Для використання в шаблоні змінної з ім'ям VARNAME використовується
конструкція <TMPL_VAR NAME=”VARNAME”>. Значення поміщене в хеш
за допомогою функції param поміщається на місце даного тега. При цьому у
нас виходить документ не повністю відповідає стандарту HTML. Якщо ви
турбуєтеся про правильність синтаксису вашого документа, то замість даного тега
можна використовувати наступну форму: <!– TMPL_VAR NAME=PARAM1
–>
. Вона працює також, як і попередня, але не порушує правильності
HTML документа. Обидві ці форми можна використовувати всередині інших тегів, наприклад
так: <IMG src = "http://www.ishodniki.ru/ <TMPL_VAR NAME=IMAGE_SRC>"> ".


Обробка виведених змінних може контролюватися параметром тега з
ім'ям ESCAPE. Припустимими значеннями є HTML і
URL, При цьому відбувається перетворення символів, не дозволених в
даному контексті.

Умовні оператори


Інший часто використовуваної конструкцією є умова. Воно має форму
<TMPL_IF NAME="ИМЯ_УПРАВЛЯЮЩЕГО_ПАРАМЕТРА"> Дані
1 <TMPL_ELSE> Дані 2 </ TMPL_IF>
. При цьому Дані 1
з'являться в результаті тільки, якщо змінна з ім'ям
Імя_управляющего_параметра буде мати справжнє значення, у противному
випадку в результаті з'являться Дані 2. Модуль допускає використання
тільки однієї гілки умови, не використовуючи <TMPL_ELSE>. Заповнення
змінної відбувається як завжди.


Протилежним за дією тегом <TMPL_IF..> є тег
<TMPL_UNLESS>. Він має синтаксис <TMPL_UNLESS
NAME = "Імя_управляющего_параметра"> Дані </ TMPL_UNLESS>
і вставляє
Дані тільки якщо змінна Імя_управляющего_параметра має
помилкове значення або взагалі не визначена.


Функція param може бути використана також для отримання значення
зазначеного параметра. Для цього просто викличте функцію з ім'ям потрібного
параметра.


Оператор циклу


Важливим тегом є тег, що позначає цикл. Він має следущий синтаксис:
<TMPL_LOOP NAME="LOOP_NAME"> Повторювана
частину </ TMPL_LOOP>
. Мінлива LOOP_NAME повинна бути посиланням
на список даних. У цьому списку можуть зберігається і просто значення, і посилання на
інші хеши даних, що дозволяє будувати вкладені конструкції, як у наступному
прикладі.


Якщо ми в нашому шаблоні напишемо наприклад таку конструкцію

<table width="100%">
<TMPL_LOOP NAME=EMPLOYEE_INFO>
<tr>
<td> Ім'я: <TMPL_VAR NAME=NAME> </ td>
<td> Посада: <TMPL_VAR NAME=JOB> </ td>
</tr>
</TMPL_LOOP>
</table>

в скрипті заповнимо цей шаблон даними:

$template->param(EMPLOYEE_INFO => [
{Name => "Іванов", job => "програміст"},
{Name => "Петров", job => "менеджер"},
]);


то ми отримаємо такий висновок (тільки генерується частина шаблону):

<table width="100%">
<tr>
<td> Ім'я: Іванов </ td>
<td> Посада: програміст </ td>
</tr>
<tr>
<td> Ім'я: Петров </ td>
<td> Посада: менеджер </ td>
</tr>
</table>

Важливо пам'ятати, що всередині циклу видно лише використовувані в ньому змінні.
Для того, щоб посилатися на зовнішні (по відношенню до циклу) змінні, ви
повинні використовувати параметр global_vars при створенні
об'єкта.

Інші оператори


Модуль також дозволяє включати в шаблон інші шаблони, що допомагає
використовувати повторювані частини в різних документах. Для включення файлу
filename.tmpl використовується конструкція <TMPL_INCLUDE
NAME=”filename.tmpl”>
. При цьому шаблон може включити сам себе і ми
отримаємо нескінченну рекурсію. Будьте обережні! При створенні об'єкта
можна вказати яка максимальна глибина вкладених файлів може бути досягнута.
Це контролюється ключем max_includes.

Висновок


Більш детальну інформацію про налаштування параметрів виведення результатів і
функціях дивіться довідкову сторінку HTML:: Template.


Про інші модулях роботи з шаблонами ми розповімо в наступних випусках. Файли
з прикладами коду можна
завантажити у вигляді ZIP-архіву.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*