
циклом (выработку сигнала о его продолжении или прекращении) и изменение значений
переменных обработчику события цикла.
При публикации базы данных чаще всего приходится перебирать записи некоторого
набора данных БД, на каждом шагу генерируя по одному и тому же шаблону HTML-
представление данных, содержащихся в полях очередной записи. Такую генерацию
можно сделать полностью автоматической, задавая в теге имя набора данных и диапазон
перебираемых записей.
Определенную выше функциональность реализуют команды языка шаблонов, каждая из
которых оформляется в виде специального тега. Любой команде в теге может
предшествовать последовательность условий If и Ifno. Команда выполняется только
тогда, когда все условия последовательности удовлетворены. Язык шаблонов включает
команды присваивания значений переменным Define, LocDefine, команды генерации по
шаблону строки String и Tag, команду генерации по вложенному шаблону документа
Template, команду циклической генерации List, команду циклической генерации по
набору данных ListTab, команду вычисления (произвольной генерации) Calc. При
выполнении команд List и Calc происходят события, обрабатываемые соответствующими
обработчиками.
Для реализации в Delphi языка шаблонов нами разработана компонента PageGenerator.
Функциональность языка реализуется приватными свойствами и методами этой
компоненты. Взаимодействие же скрипта с шаблоном реализовано следующими
публичными методами и событиями этой компоненты: Produce (генерация по шаблону
документа), Define и LocDefine (присваивание значение переменной), StringOfName
(получение шаблона строки), ValueOfName (получение значения переменной),
SubstForHTML (генерация по шаблону строки), OnCalc (событие вычисления), OnList
(событие цикла).
Для каждого запроса, выполняемого скриптом, разработаны наборы вложенных друг в
друга шаблонов документов, описывающих HTML-дизайн генерируемых документов.
Каждый запрос выполняется скриптом следующим образом. После интерпретации
запроса (извлечения из БД необходимых данных в соответствии с параметрами запроса)
скрипт присваивает значения используемым в шаблонах переменным (методом Define) и
настраивает обработчики событий OnCalc, OnList, вызываемые в шаблонах. После этого
вызывается метод генерации (Produce) по головному шаблону набора. Обработчики
событий, будучи вызванными из шаблонов, в свою очередь, могут присваивать значения
переменным (методами Define, LocDefine), а обработчик события вычисления может
генерировать выходные тексты, в том числе и с использованием методов генерации по
шаблону (Produce, SubstForHTML). При этом им доступны (методом StringOfName)
значения всех переменных, определенных ранее в шаблонах или в скрипте.
Завершает главу пример обработки реального запроса с помощью шаблонов. Приводится
набор шаблонов, описывающих HTML-дизайн страницы, возвращаемой web-сервером
"Учебники Москвы" в ответ на запрос поиска учебников, а также текст HTML страницы,