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

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

Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка
База данных студентов на Delphi (файл записей) + Блок схемы

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Программирование на 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 Комментариев · 5702 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Plasma
Delphi Быстрый Ст...
3d Tank [Исходник...
Панель статистики...
Microsoft SQL Ser...
начисление процен...
C# 2005 и платфор...
Самоучитель PHP 5...
index.php + мод ...
Tenis [Исходник н...
isoCanvas (Редакт...
Пример работы с б...
БД студентов
PHP5. Профессиона...
SMLPack v1.0
Delphi 2005 Учимс...
Библия хакера 2. ...
С. Г. Горнаков - ...
Переработанный пл...
100 компонентов о...

Топ загрузок
Приложение Клие... 100463
Delphi 7 Enterp... 86573
Converter AMR<-... 20076
GPSS World Stud... 12619
Borland C++Buil... 11743
Borland Delphi ... 8552
Turbo Pascal fo... 7037
Visual Studio 2... 4998
Калькулятор [Ис... 4758
FreeSMS v1.3.1 3541
Случайные статьи
Вычисление интегра...
Раздел 2.6
Сериализация. Выво...
Шрифт
находящимся внутри...
Шинная архитектура
Электронные счетны...
Поиск
Преобразование типов
Разработать прикла...
2.6.3. Установле...
Свойства информаци...
Самая лучшая фирма...
Наслаждайтесь рабо...
Оглядывайтесь назад
Изображения для пр...
• Решите, какой IP...
ГЛАВА 2 БОЛЕЕ ДЕТ...
Детализация блоков...
Упражнение 2: прое...
Механизм условных ...
Система 4.4BSD - л...
Способен ли сервер...
SQL-функции преоб...
Сообщения Auto-Ne...
Статистика



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


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