Шаблоны Optimizer 2.5 стр. 1 из 13 Шаблоны Optimizer 2.5 В данном документе описывается использование шаблонов в технологии Optimizer. Терминология Шаблон вывода Шаблон вывода – шаблон, который задает одну из стандартных форм отображения элементов класса. Шаблон вывода – это только шаблон отображения. Если говорить терминами команд, то шаблон вывода содержит только область found, т.е. способ отображения, но не содержит query и других команд для заполнения хранилища. Шаблоны вывода бывают настраиваемыми и фиксированными. Шаблоны вывода уникальны в рамках системы, но для отдельных классов их можно перекрывать. В т.ч. можно перекрывать настраиваемый шаблон фиксированным и наоборот. Настраиваемый шаблон вывода Настраиваемый шаблон вывода написан таким образом, что он поддерживает динамическое изменение количества выводимых полей и форму их вывода. Настраиваемые шаблоны вывода могут быть трех типов – для списка, для свойств, для карточки поиска. Шаблон вывода для списка задает вид, как элементы класса будут показываться в списке элементов. В зависимости от типа настраивается разные параметры. Для класса может быть несколько шаблонов вывода каждого типа. Фиксированный шаблон вывода В фиксированном шаблоне вывода жестко прописываются поля и их вид. Для такого шаблона на уровне интерфейса блокируется возможность настройки (поскольку она ни на что не влияет). Шаблон сайта Шаблон сайта – шаблон, который задает общий вид представления информации на сайте (сетку представления информации). Обычно при создании сайта используется 3-5 шаблонов сайта. Шаблон сайта содержит места публикации, в которые должны подставляться реальные данные. Кроме того, шаблон сайта может содержать выборки для формирования базовых элементов (меню, навигация и т.д.) Место публикации Именованная область в шаблоне сайта, куда будут подставляться данные. Шаблон публикации Шаблон, в котором формируется определенная часть страницы. В шаблоне выбираются данные и отображаются. Для отображения могут использоваться шаблоны вывода. Шаблон содержит выборки и элементы дизайна. Результат обработки шаблона публикации может быть размещен в одном месте публикации. Шаблон отображения Шаблон отображения – шаблон, используемый для построения отображения. Указывает, что отображение строиться на базе такого-то шаблона сайта и каждому месту публикации ставит в соответствие шаблон публикации. Фактически представляет собой набор соответствий. Шаблоны Optimizer 2.5 стр. 2 из 13 Общие положения шаблоны хранятся в директории: templates/ в ней есть поддиректории соответственно типам шаблонов: site/ - шаблоны сайта show/ - шаблоны отображения pub/ - шаблоны публикации sub/ - шаблоны вывода mail/ - почтовые шаблоны обработка любой страницы начинается с шаблона отображения шаблоны отображения вызываются одноименные с asp-файлом, т.е. если вызвать about.asp то будет отрисован шаблон templates/show/about.htm Шаблоны Optimizer 2.5 стр. 3 из 13 Визуальная схема взаимодействия шаблонов по порядку загрузки. Шаблон отображения: МЕСТО1 : ШАБЛОН ПУБЛИКАЦИИ1 Имя шаблона сайта и список соответствия мест в сетке шаблонам публикации МЕСТО2 : ШАБЛОН ПУБЛИКАЦИИ2 МЕСТО3 : ШАБЛОН ПУБЛИКАЦИИ3 МЕСТО4 : ШАБЛОН ПУБЛИКАЦИИ4 ШАБЛОН САЙТА 1 templates/show/document.htm Шаблон сайта1: ШАБЛОН ПУБЛИКАЦИИ 1 МЕСТО 1 МЕСТО 3 ШАБЛОН ПУБЛИКАЦИИ 3 ШАБЛОН ПУБЛИКАЦИИ 2 МЕСТО 2 МЕСТО 4 ШАБЛОН ПУБЛИКАЦИИ 4 templates/site/inner.htm В шаблоне сайта программируется расположение, форма и размер мест (сетка) под шаблоны публикации. Шаблоны Optimizer 2.5 стр. 4 из 13 ШАБЛОН ПУБЛИКАЦИИ1 ДАННЫЕ templates/pub/doc1.htm ШАБЛОН ПУБЛИКАЦИИ2 MS SQL ШАБЛОН ПУБЛИКАЦИИ3 ШАБЛОН ПУБЛИКАЦИИ4 ДАННЫЕ В шаблонах публикации располагается непосредственное наполнение данными, файлами и изображениями. Если шаблон публикации может иметь несколько вариантов отображения – он может наполняться шаблонами вывода, помимо других данных. ДАННЫЕ ДАННЫЕ УСЛОВИЕ1 = ШАБЛОН ВЫВОДА1 УСЛОВИЕ2 = ШАБЛОН ВЫВОДА2 УСЛОВИЕ3 = ШАБЛОН ВЫВОДА3 templates/pub/ doc2.htm templates/pub/doc3.htm templates/pub/ doc4.htm ШАБЛОН ВЫВОДА 1 ШАБЛОН ВЫВОДА 2 ШАБЛОН ВЫВОДА 3 templates/sub/ client_prop1.htm templates/sub/ client_prop2.htm templates/sub/ client_prop3.htm ДАННЫЕ ДАННЫЕ В РЕЗУЛЬТАТЕ ДАННЫЕ MS SQL Шаблоны Optimizer 2.5 стр. 5 из 13 Пример цепочки вызова шаблонов: document.asp Шаблон отображения. (templates/show/document.htm) ... <gp@mso@set_place><место публикации>:<шаблон публикации><gp@mso@set_place> <gp@mso@set_place>text:doc<gp@mso@set_place> … <gp@mso@sitetmpl>inner</gp@mso@sitetmpl> Шаблон сайта (templates/site/inner.htm) <gp@mso@place>text</gp@mso@place> Тег set_place только задает соответствие места публикации и шаблона публикации, сама подстановка происходит при обработке шаблона сайта – соответствующего тега place Шаблон публикации (templates/pub/doc.htm) <gp@query$1> /* выбор свойств объекта */ </gp@query$1> выбор настроенных атрибутов <gp@mso@cmd_class_prop$2> cl_code = '<код класса>' subtmpl = '<шаблон вывода/настройка>' </gp@mso@cmd_class_prop$2> <gp@mso@cmd_class_prop$2> cl_code = '<код класса>' subtmpl = '<шаблон вывода/настройка>' </gp@mso@cmd_class_prop$2> <gp@mso@subtmpl><шаблон вывода>$$<код класса></gp@mso@subtmpl> <gp@mso@subtmpl>client_prop$$article</gp@mso@subtmpl> Шаблон вывода (если есть шаблон templates/sub/<код класса>/client_prop.htm, то отображается он, иначе templates/sub/client_prop.htm) Вывод полей объекта из хранилища $1 Поля задаются в настройке шаблона (например, client_prop) в конфигураторе, и выбираются в хранилище $2 <gp@process_fields$1> <gp@qlist$2> <b><gp@field$2>pr_name</gp@field$2></b> <gp@field$1><gp@field$2>pr_code</gp@field$2></gp@field$1> </gp@qlist$2> </gp@process_fields$1> Шаблоны Optimizer 2.5 стр. 6 из 13 Шаблоны Шаблоны сайта Сначала требуется определить основные виды страниц сайта, и выделить из них шаблоны сайта в шаблонах сайта можно определить общие места (заголовок, подвал, строка меню, ...), и выделить их в инклюды места для публикации информации отмечаются в шаблонах сайта тегами: <gp@mso@place>placename</gp@mso@place> placename - имя места для публикации Шаблоны отображения в шаблонах отображения происходит связывание шаблонов сайта, шаблонов публикации и мест публикации эта связь задается следующей конструкцией: <gp@mso@set_place>placename1:template_name1</gp@mso@set_place> <gp@mso@set_place_param>param_name:param_value</gp@mso@set_place_param> ... <gp@mso@set_place>placename2:template_name2</gp@mso@set_place> <gp@mso@set_place_param>param_name:param_value</gp@mso@set_place_param> ... <gp@mso@set_place>placename1:template_name1</gp@mso@set_place> <gp@mso@set_place_param>param_name:param_value</gp@mso@set_place_param> ... <gp@mso@set_place>placename2:template_name1</gp@mso@set_place> <gp@mso@set_place_param>param_name:param_value</gp@mso@set_place_param> ... <gp@mso@sitetmpl>site_template_name</gp@mso@sitetmpl> где: placenameN template_name1 param_name param_value site_template_name - имена мест отображения - имена шаблонов публикации, связываемых с данным местом - имена параметров шаблонов публикации - значения параметров шаблонов публикации - имена шаблонов сайта Шаблоны публикации Шаблоны Optimizer 2.5 стр. 7 из 13 В шаблоне публикации может присутствовать секция <gp@mso@declare> - она используется для работы с шаблоном через интерфейс конфигуратора, будет заполняться автоматически, в данный момент не используется <gp@mso@declare> NAME=<имя шаблона> DESCRIPTION=<Описание шаблона> PARAM=<имя параметра>:<значение по умолчанию>:<Описание параметра> ... PARAM=<имя параметра>:<значение по умолчанию>:<Описание параметра> </gp@mso@declare> параметры шаблона подставляются тегами: <gp@mso@place_param><имя параметра>:<значение по умолчанию></gp@mso@place_param> для вывода параметров внутри других gp-тегов используется тег <gp@mso@process_params> ... </gp@mso@process_params> вывод данных может осуществляться как в самом шаблоне публикации (gp-теги gp@found, gp@list, …), так и подстановкой шаблонов вывода: <gp@mso@subtmpl><имя шаблона вывода>$$<класс></gp@mso@subtmpl> если шаблон переопределен для класса, то подставляется он, если нет – берется общий шаблон по умолчанию Шаблоны вывода (классов) Не настраиваемые шаблоны вывода являются обычной секцией gp@found - gp@list Настраиваемые шаблоны вывода строятся при помощи тегов gp@mso@set_pattern, или при помощи переменных: gp@mso@set_pattern: выставляем значение шаблона строчки вывода <gp@mso@set_pattern$5> <gp@field$1><gp@field$5>pr_code</gp@field$5></gp@field$1> </gp@mso@set_pattern$5> выводим список строк из хранилища $1 {%pattern%} – заменяется на значение шаблона <gp@mso@get_pattern$5> <gp@qlist$1> <tr bgcolor="white"> {%pattern%} </tr> Шаблоны Optimizer 2.5 стр. 8 из 13 </gp@qlist$1> </gp@mso@get_pattern$5> </table> переменные: устанавливаем значение переменной – шаблон строчки вывода <gp@found$2> <gp@mso@set_var>row_template:<gp@qlist$2><td> <gp@process_fields><gp@field$1><gp@field$2>pr_code</gp@field$2></gp@fie ld$1></gp@if><br></gp@if></gp@process_fields></td></gp@qlist$2> </gp@mso@set_var> </gp@found$2> выводим список объектов <table> <gp@list> <tr> <gp@mso@var>abc</gp@mso@var> </tr> </table> </gp@list> Переменные переменные значения переменных устанавливаются тегом: <gp@mso@set_var><имя переменной>:<значение></gp@mso@set_var> выдаются значения тегом: <gp@mso@var><имя переменной></gp@mso@var> Если переменная не определена ранее, выдается пустое значение. Если нужно заменить значения переменных внутри других gp-тегов, используется тег: <gp@mso@process_vars> ... </gp@mso@process_vars> Особенности Локальность установки параметров для мест публикации тегами set_place_param теги gp@mso@set_place_param обрабатываются и в шаблонах вывода и в шаблонах публикации с привязкой к месту публикации, т.е. если в шаблоне отображения встретится конструкция: <gp@mso@set_place>place1:pub_tmpl1</gp@mso@set_place> <gp@mso@set_place_param>param1:1</gp@mso@set_place_param> Шаблоны Optimizer 2.5 стр. 9 из 13 <gp@mso@set_place>place2:pub_tmpl1</gp@mso@set_place> <gp@mso@set_place_param>param1:2</gp@mso@set_place_param> <gp@mso@sitetmpl>two_place_tmpl</gp@mso@sitetmpl> а в шаблоне публикации pub_tmpl1: <gp@if>{%<gp@mso@place_param>param1</gp@mso@place_param>%}={%1%} <gp@mso@set_place_param>param2:2_1</gp@mso@set_place_param> {%else%} <gp@mso@set_place_param>param2:2_2</gp@mso@set_place_param> </gp@if> <gp@include>/templates/inc1.inc</gp@include> то есть инклюд inc1.inc будет включен дважды, но значение параметра param2 будет равно “2_1” для места публикации place1, и “2_2” для place2 Рекомендации по организации шаблонов Использование единого шаблона писать html в шаблоне отображения (подходит, например, для первой страницы - т.к. иногда для нее нет смысла делать отдельный шаблон сайта: раскладка на ней уникальна и больше нигде на сайте не используется) show/default.htm (шаблон отображения) <gp@query> получаем имя и другие атрибуты раздела </gp@query> <HTML> <HEAD> <TITLE><gp@field>c_name</gp@field></TITLE> </HEAD> <BODY> <!-- обрамляющая таблица с нужными хтмл-ем --> <table> <!-- первая строка: текст --> <tr><td> <table> <tr> <td> <!-- текст рубрики --> <gp@field>comment</gp@field> </td> </tr> </table> </td></tr> <!-- вторая строка: новости --> <gp@query> список новостей, например </gp@query> <gp@found> <tr><td> <table border=1> <gp@qlist> <tr> <td><gp@field>c_name</gp@field></td> </tr> </gp@qlist> Шаблоны Optimizer 2.5 стр. 10 из 13 </table> </td></tr> </gp@found> <gp@not_found> <tr><td>Новостей нет</td></tr> </gp@not_found> <gp@error> <tr><td>Ошибка выборки новостей</td></tr> </gp@error> <!-- третья срока: анонсы --> <gp@query> список анонсов </gp@query> <gp@found> <tr><td> <table border=1 bgcolor=gray> <gp@qlist> <tr> <td><gp@field>c_name</gp@field></td> </tr> </gp@qlist> </table> </td></tr> </gp@found> <!-- если нету - ничего не выводим --> <gp@error> <tr><td>Ошибка выборки анонсов</td></tr> </gp@error> </table> </BODY> </HTML> в show/default.htm можно использовать инклюды, но места публикации и шаблоны публикации с параметрами уже нельзя Использование структуры шаблонов подходит для внутренних страниц сайта - удобство в том, что есть один шаблон сайта одна раскладка страницы, а меняется только содержимое мест публикации show/default.htm (шаблон отображения) <gp@query> получаем имя и другие атрибуты раздела </gp@query> <gp@comment> ставим gp@process_fields чтобы обработать поля выборки до подстановки шаблонов </gp@comment> <gp@process_fields> <gp@comment> для title удобно использовать переменную - ее можно наращивать по ходу и проверять на пустоту перед выводом </gp@comment> <gp@mso@set_var>title:<gp@field>c_name</gp@field></gp@mso@set_var> <gp@mso@set_place>text:comment</gp@mso@set_place> <gp@mso@set_place_param>text:<gp@field>comment</gp@field></gp@mso@set_place_param> <gp@mso@set_place>doclist:news</gp@mso@set_place> <gp@mso@set_place_param>ob_no:<gp@field>ob_no</gp@field></gp@mso@set_place_param> <gp@mso@set_place_param>nf_message:Новостей нет</gp@mso@set_place_param> <gp@mso@set_place_param>err_message:Ошибка выборки новостей</gp@mso@set_place_param> <gp@mso@set_place>anons:anonslist</gp@mso@set_place> Шаблоны Optimizer 2.5 стр. 11 из 13 </gp@process_fields> <gp@mso@sitetmpl>inner</gp@mso@sitetmpl> site/inner.htm (шаблон сайта) <HTML> <HEAD> <TITLE><gp@mso@var>title:Title по умолчанию</gp@mso@var></TITLE> </HEAD> <BODY> <!-- обрамляющая таблица с нужными хтмл-ем --> <table> <!-- первая строка: текст --> <tr><td> <gp@mso@place>text</gp@mso@place> </td></tr> <!-- вторая строка: новости --> <gp@mso@place>doclist</gp@mso@place> <!-- третья срока: анонсы --> <gp@mso@place>anons</gp@mso@place> </table> </BODY> </HTML> pub/comment.htm (шаблон публикации) <table> <tr> <td> <!-- текст рубрики --> <gp@mso@place_param>text</gp@mso@place_param> </td> </tr> </table> pub/news.htm (шаблон публикации) <gp@comment> т.к. <gp@mso@place_param>ob_no</gp@mso@place_param> используется внутри query, поставим gp@mso@process_params чтобы он обработался раньше gp@query </gp@comment> <gp@mso@process_params> <gp@query> список новостей, например (тут пригодится <gp@mso@place_param>ob_no</gp@mso@place_param>) </gp@query> </gp@mso@process_params> <gp@found> <tr><td> <table border=1> <gp@qlist> <tr> <td><gp@field>c_name</gp@field></td> </tr> </gp@qlist> </table> </td></tr> </gp@found> <gp@not_found> <tr><td><gp@mso@place_param>nf_message</gp@mso@place_param></td></tr> </gp@not_found> <gp@error> <tr><td><gp@mso@place_param>err_message</gp@mso@place_param></td></tr> </gp@error> pub/anonslist.htm (шаблон публикации) Шаблоны Optimizer 2.5 стр. 12 из 13 <gp@query> список анонсов </gp@query> <gp@found> <tr><td> <table border=1 bgcolor=gray> <gp@qlist> <tr> <td><gp@field>c_name</gp@field></td> </tr> </gp@qlist> </table> </td></tr> </gp@found> <!-- если нету - ничего не выводим --> <gp@error> <tr><td>Ошибка выборки анонсов</td></tr> </gp@error> Работа с шаблонами в конфигураторе Шаблоны сайта: возможность загрузить или отредактировать шаблон при загрузке или изменении шаблона сайта в нем находятся места публикации, заводятся в базе и привязываются к шаблону Шаблоны публикации: возможность загрузить или отредактировать шаблон при загрузке или изменении шаблона, считывается секция gp@declare - параметры, и описание шаблона заводятся в базе и привязываются к шаблону (для параметра нужно хранить его имя, описание и значение по умолчанию, имя шаблона в gp@declare лучше не определять - ведь оно однозначно определяется именем файла) Шаблоны отображения: шаблоны отображения могут быть весьма сложными и многофункциональными, поэтому однозначной привязкой "шаблон сайта - места публикации - шаблон публикации - значения параметров шаблона публикации" ограничиться нельзя. в шаблоне отображения может использоваться несколько таких соответствий, в зависимости от переданных параметров, да и параметры шаблона публикации могут тоже меняться по каким-то условиям предлагается для шаблона отображения (помимо стандартной возможности загрузить или отредактировать шаблон) дать возможность заводить, хранить и использовать несколько именованых соответствий "шаблон сайта - места публикации - шаблон публикации-значения параметров шаблона публикации" при этом загрузка или редактирование шаблона отображения не будут влиять на эти объекты в базе то есть для шаблона отображения заводятся: - название (автоматически по имени файла) - описание - элементы отображения, каждый из которых имеет: Шаблоны Optimizer 2.5 стр. 13 из 13 - имя - описание - шаблон сайта (выбор из списка) - для каждого из мест публикации выбранного шаблона сайта выбирается шаблон публикации - для каждого из этих шаблонов публикации задаются значения параметров в шаблоне отображения можно вставлять в соответствующие места вызов элемента отображения по имени - это даст возможность при определенном стиле написания шаблонов отображения действительно серьезно управлять отображением информации на сайте через конфиг и админ.