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

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

Программа тестирования и обучающая программа по математике на Turbo Pasc...
База данных студентов на Delphi (файл записей) + Блок схемы
Моделирование круглосуточного интернет кафе на GPSS + Отчет

Реклама



Подписывайся на 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 Комментариев · 5773 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
C++ Builder в за...
ADVstatusbar
PDJ_Anima
Delphi 7 Enterpri...
Strawberry Prolog...
isoCanvas (Редакт...
GPSS World Studen...
XPATComponents
Калькулятор [Исхо...
EMS QuickExport S...
Алгоритм трассиро...
Delphi7 Для профе...
XPmenu
Мод "проверочный ...
Billenium Effects...
JanComp
Панель "Случайное...
PrevInst
HTMLredaktor
ComboBox97

Топ загрузок
Приложение Клие... 100474
Delphi 7 Enterp... 87552
Converter AMR<-... 20081
GPSS World Stud... 13155
Borland C++Buil... 11954
Borland Delphi ... 8643
Turbo Pascal fo... 7042
Visual Studio 2... 5002
Калькулятор [Ис... 4869
FreeSMS v1.3.1 3544
Случайные статьи
Что делают маршрут...
подкаталог Ех73
Настройте пакетные...
Внешние элементы ...
Умеете ли вы делат...
Проектирование
Технология Drag&Dr...
Операторы is и as
Методы форматирования
Редактор изображен...
Моделирование элек...
Ва-Банк - вот лучш...
Type mismatch
Примените шаблон б...
Почему Казино - лу...
Определение шаблон...
CD-ROM
клиенты POP3/SMTP
Амперсанд (&)
Применение модульн...
Web-сервис
Использование sysl...
Формат кадров и по...
В результате вам п...
MATCH (СИНХРОНИЗИР...
Статистика



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


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