Навигация
Главная
Поиск
Форум
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
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 11
На сайте нет зарегистрированных пользователей

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

Моделирование процесса обработки заданий на вычислительном центре на GP...
Моделирование системы управления качеством производственного процесса на...
Моделирование процесса обработки заданий пакетным режимом работы с квант...

Программирование на 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 15:54:54 · 0 Комментариев · 7456 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
PHP: обучение на ...
AlignEdit
IPAddresseEdit
Шифрование по алг...
C++ Builder 6 СПР...
База данных: Книж...
Delphi 2005. Разр...
Animation (Пример...
PBEditPack
Файловый менеджер
Degisy Data Acces...
INSTANT BOOSTER v...
MicroGPSS Studen ...
Язык программиров...
Изучаем Ассемблер
KOL & MCK v1.69
Алгоритмы шифрова...
Report
TelBook
GamesBase 3.0

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14238
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Глава 23. Прави...
Сделать ставки на ...
Дизъюнкция целей
Идею можно распрос...
туннеля
Казино Эльдорадо -...
Выбор дверей
Расширенный монито...
Функция date() - в...
Guide Plus+
Playstation 2
Применение протоко...
Использование DTD-...
32-битовое целое ч...
Особенности MediaP...
Кодирование видеоп...
IP адрес, его опре...
Определение шаблон...
Разработка плана б...
Советы по загрузке...
binary search: клю...
Печать
Как таунхаус Сабур...
Юрист по арбитражн...
Логотип Матрикс
Статистика



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


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