Програмування на perl

Однією з частих завдань, що стоять перед Web-програмістом є відділення логіки отримання даних від формату представлення даних. Для вирішення такого завдання часто використовують шаблони html-документів, які при роботі програм заповнюються даними. Це дозволяє виконувати верстку сторінок іншій людині, або змінювати зовнішній вигляд сторінок не змінюючи саму програму.

CPAN надає програмісту вибір різних засобів роботи з шаблонами. Серед них: HTML :: Template. Text :: Template. Template toolkit. Як правило методика роботи з усіма цими модулями однакова. Програміст створює об'єкт, який вказує на потрібний шаблон, потім формується набір даних, для заповнення шаблону і виконується саме заповнення шаблону, а результат цього повертається у вигляді готової HTML сторінки. Давайте докладніше розглянемо модуль HTML :: Template.

HTML :: Template також дозволяє програмісту контролювати роботу з шаблонами. Наприклад, при використанні даного модуля в поєднанні з mod_perl можна використовувати кешування розібраних шаблонів і використовувати результати в різних скриптах. Крім кешування програміст може задати фільтри, які будуть проводити обробку згенерованого тексту. Всі параметри шаблонів задаються при створенні об'єкта, що описує шаблон.

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

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

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

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

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

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

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

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

Для використання в шаблоні змінної з ім'ям VARNAME використовується конструкція . Значення поміщене в хеш за допомогою функції param поміщається на місце даного тега. При цьому у нас виходить документ не повністю відповідає стандарту HTML. Якщо ви турбуєтеся про правильність синтаксису вашого документа, то замість даного тега можна використовувати наступну форму: . Вона працює також, як і попередня, але не порушує правильності HTML документа. Обидві ці форми можна використовувати всередині інших тегів, наприклад так: .

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

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

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

Протилежних за дією тегом є тег . Він має синтаксис дані і вставляє Дані тільки якщо змінна ІМЯ_УПРАВЛЯЮЩЕГО_ПАРАМЕТРА має помилкове значення або взагалі не визначена.

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

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

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

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

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

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

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

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

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

висновок

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

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