Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
• Заказать продвижение сайта
• Программа для рисования блок-схем
• Инженерный калькулятор онлайн
• Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Гостевая книга ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Эмулятор микроп... 65535
Бип из системно... 58097
Invision Power ... 57352
Организация зап... 57156
Модуль Forms 56355
Создание отчето... 54773
Приложение «Про... 54159
Подключение Mic... 53952
Оператор выбора... 53739
ТЕХНОЛОГИИ ДОСТ... 50638
Программируемая... 47071
Пример работы с... 46400
Имитационное мо... 46390
21 ошибка прогр... 41477
Реклама
Сейчас на сайте
Гостей: 12
На сайте нет зарегистрированных пользователей

Пользователей: 13,006
новичок: margaritamoroz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Информационная система - продуктовый магазин на Turbo Pascal (База данны...
База данных - словарь терминов на Delphi + Пояснительная записка
Медиа плейер на Delphi + Пояснительная записка

Реклама

Программирование на PERL. Работа с шаблонами. Использование HTML-Template с CGI-скриптами
Одной из частых задач стоящих перед Web-программистом является отделение логики получения данных от формата представления данных. Для решения такой задачи часто используют шаблоны html-документов, которые при работе программ заполняются данными. Это позволяет выполнять верстку страниц другому человеку, или изменять внешний вид страниц не изменяя саму программу.

предоставляет программисту выбор разных средств работы с шаблонами. Среди них: , , Template toolkit. Как правило методика работы со всеми этими модулями одинакова. Программист создает объект, указывающий на нужный шаблон, затем формируется набор данных, для заполнения шаблона и выполняется само заполнение шаблона, а результат этого возвращается в виде готовой HTML страницы. Давайте подробнее рассмотрим модуль HTML::Template.

В отличии от других модулей, этот модуль ориентирован на то, что в качестве шаблонов будут использоваться страницы с HTML разметкой. Соответственно, директивы шаблона выглядят подобно HTML тэгам, не мешая HTML редакторам работать с разметкой страницы. С помощью этих директив можно заполнять шаблон разными данными, в зависимости от условных флагов; имитировать циклы, например при заполнении таблиц. При этом все конструкции можно использовать внутри друг друга, создавая шаблоны произвольной сложности.

HTML::Template также позволяет программисту контролировать работу с шаблонами. Например, при использовании данного модуля в сочетании с mod_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\n\n";
# выдаем готовый результат
print $template->output;

Для использования в шаблоне переменной с именем VARNAME используется конструкция <TMPL_VAR NAME="VARNAME">. Значение помещенное в хеш с помощью функции param помещается на место данного тэга. При этом у нас получается документ не полностью соответствующий стандарту HTML. Если вы беспокоитесь о правильности синтаксиса вашего документа, то вместо данного тэга можно использовать следующую форму: <!-- TMPL_VAR NAME=PARAM1 -->. Она работает также, как и предыдущая, но не нарушает правильности HTML документа. Обе эти формы можно использовать внутри других тэгов, например так: <IMG SRC="<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 при создании объекта.

Опубликовал Kest October 31 2008 18:54:54 · 0 Комментариев · 4897 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
• Фолловь меня в Твиттере!
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Gold Submitter II...
Добавление к ссы...
Панель "ссылки"
Autorunner
SynEdit
WinAmp
FreeNet
Report
AlignEdit
Swing. Эффектные...
CwstatusBar
Медиа комбайн
HtmlLerz PRO
Калькулятор [Исхо...
WebReg v1.3
Архив Апгрейтов с...
Delphi World 6.0
WordReport
Основы Delphi
FreeSMS v1.3.1

Топ загрузок
Приложение Клие... 100265
Delphi 7 Enterp... 74760
WAV 1.7.1" class="side">Converter AMR<-... 20015
Borland C++Buil... 10459
GPSS World Stud... 8749
Borland Delphi ... 7441
Turbo Pascal fo... 6866
Visual Studio 2... 4864
Калькулятор [Ис... 3828
FreeSMS v1.3.1 3480
Случайные статьи
Содержание
Карта JOB
7.4. Справочник ...
Аварийное восстано...
Интерфейс с базой ...
Битовые поля в язы...
Пошаговое выполнен...
вызвались:• Джон Ч...
Продолжительность ...
Как запускать прог...
чтобы переданные п...
Температура нагрет...
Возможности окруже...
Завершение установ...
Применение беспров...
Датчик дистанционн...
Игры
Операнды памяти
Операции с контейн...
Проектирование алг...
Как привлечь 1000 ...
лесу Windows 2000
Большие числа
Циклический сдвиг ...
Алгоритмы поиска в...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?