Створення об’єкта, Perl, Програмування, статті

Для роботи з шаблоном необхідно спочатку створити об’єкт, який описує вибраний шаблон. Створення об’єкта виконується за допомогою виклику оператора
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, При цьому відбувається перетворення символів, не дозволених в даному контексті.



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


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


Протилежним по дії тегом <TMPL_IF..> є тег
<TMPL_UNLESS>. Він має синтаксис <TMPL_UNLESS NAME = “ІМЯ_УПРАВЛЯЮЩЕГО_ПАРАМЕТРА”> Дані і вставляє
Дані тільки якщо змінна ІМЯ_УПРАВЛЯЮЩЕГО_ПАРАМЕТРА має помилкове значення або взагалі не визначена.


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


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


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


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

<table width="100%">
<TMPL_LOOP NAME=EMPLOYEE_INFO>
<tr>

Ім’я:

Посада:
</tr>
</TMPL_LOOP>
</table>

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

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

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

<table width="100%">
<tr>

Ім’я: Іванов

Посада: програміст
</tr>
<tr>

Ім’я: Петров

Посада: менеджер
</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>

*

*