I. Установка CMS

advertisement
2009
2009
CMS ITdesign
Руководство по использованию для webмастера
Ай-Ти Дизайн
www.itdesign.ru
I.
Установка CMS
1.
2.
3.
4.
Скопируйте файлы из архива на сервер в каталог вашего сайта.
Создайте пустую БД.
Обратитесь любым браузером на сайте по адресу /install/.
Введите в появившуюся форму параметры базы данных. По умолчанию в настройках указаны параметры для запуска сайта на локальной машине в стандартных настройках денвера (http://www.denwer.ru/).
5. Введите параметры пользователя с уровнем доступа web-мастер для административной
части сайта.
6. Введите параметры пользователя с уровнем доступа администратор для административной части сайта.
7. После проделанных процедур вам будет предложено войти в административную часть
сайта (админку).
Настройка CMS
Для настройки CMS под конкретный сайт нужно проделать следующие операции:
1. Создать шаблоны страниц (файлы с расширением tpl, которые хранятся в каталоге
/templates/). Подробнее о создании шаблонов смотрите в главах Шаблонизатор и Макросы.
2. Создать при необходимости блоки для шаблонов в разделе админки «Конфигурация→Настройки→Блоки». Подробнее в главах Шаблонизатор и Настройки.
3. При необходимости создать шаблоны табличных данных. Смотрите главу «Организация
табличных данных».
4. Настроить переменные в разделе админки «Конфигурация→Настройки→Переменные»
под нужды вашего сайта.
5. Добавить необходимые страницы сайта с указанием нужных шаблонов страниц и табличных данных.
II.
Описание административной части CMS
Работа со страницами сайта
Все страницы в CMS ITdesign выводятся на основе шаблонов страниц. То есть файлов с расширением tpl, расположенных в каталоге /template/, созданных по правилам синтаксиса html и шаблонизатора ITdesign (подробнее о синтаксисе смотрите в главе «Шаблонизатор»). Так как часто на
сайтах верхняя и нижняя части кода html на всех страницах одинаковые, в CMS предусмотрена
возможность создания страниц из трех последовательных шаблонов: шапки (footer.tpl), основной
части и подвала (content.tpl). Для каждой страницы можно указывать, использовать ли на ней
шапку и подвал, и какой шаблон использовать для основной части (по умолчанию content.tpl).
Все страницы принадлежат к какому-либо меню. Меню на сайте может быть несколько, например, вертикальное и горизонтальное. Кроме того, могут быть страницы, которые вообще не нужно
выводить в меню, например, страница с результатами поиска. Такие страницы кладутся в отдельное меню, которое не выводится в шаблоны, по умолчанию – это меню «Дополнительно».
Система страниц образует древовидную структуру, у которой в корне стоит главная страница, затем идут страницы первого уровня, каждая из которых может иметь подчиненные ей страницы
(страницы второго уровня), и т.д. Количество уровней не ограничено. Страницы, подчиненные какой-либо странице, мы будем называть ее потомками. В свою очередь страницу, потомком которой является какая-либо страница, будем называть ее предком.
Если страница находится на стадии редактирования, ее можно исключить из сайта. Тогда она будет видна в админке, но не будет отображаться на сайте. За это отвечает свойство «Опубликована».
Каждой странице можно сопоставлять два изображения (например, для вывода в шапку). Если
для конкретной страницы изображения не определены, то они наследуются от предков страницы.
В CMS ITdesign страницы бывают следующих типов:
1. обычная страница ;
2. страница табличных данных
3. пункт меню ;
4. ссылка на внешний URL
;
.
Обычная страница – это страница, содержание которой редактируется через Javascript WYSIWYG
редактор. В CMS ITdesign используется редактор TinyMCE (http://tinymce.moxiecode.com/). Содержание страницы, полученное в редакторе, выводится в шаблон в переменную {CONTENT}
(смотрите главу Шаблонизатор). Редактор TinyMCE не всегда нормально воспринимает коды javascript. Чтобы обойти эту проблему, предусмотрено поле «JavaScript», которое не подвергается
никакой обработке. Данные из этого поля выводятся непосредственно перед содержанием страницы из TinyMCE.
Страница табличных данных – страница, созданная на основе шаблона таблицы. Фактически такая страница может иметь множество подчиненных виртуальных страниц, каждая из которых соответствует записи из таблицы, на которой базируется страница. Эти страницы названы виртуальными, потому, что у них нет аналогов в дереве страниц в разделе содержания сайта. Сама страница табличных данных, как правило, используется для вывода краткого списка, составленного из
элементов таблицы. Причем этот список может, в свою очередь, также делиться на страницы. Таким образом, странице табличного типа может соответствовать сколь угодно много страниц на
сайте – это будут виртуальные страницы элементов (записей) таблицы и страницы списка. Подробнее механизм формирования таких страниц описан в главе Организация табличных данных.
Пункт меню – это собственно не страница, а контейнер для других страниц. То есть, на самом деле эта страница не существует, ссылок из меню на нее нет, и если пройти по ее адресу будет выдана 404-я ошибка. Такая страница нужна для структуризации данных на сайте. Например, в выпадающем меню страницы первого уровня могут не иметь собственного текста. Они служат для
того, чтобы при наведении на них мышки можно было увидеть список подчиненных им страниц.
Как раз такие страницы и надо делать типа «пункт меню».
Ссылка на внешний URL – это не самостоятельная страница, а внешняя ссылка на другой сайт. То
есть, нажимая ссылку на эту страницу (например, в меню), мы переходим по внешнему URL. Собственной информации такая страница не содержит.
Более детально про работу со страницами можно прочитать в «Руководстве пользователя CMS
ITdesign».
Уровни пользователя
Уровни пользователя введены, чтобы четко различать уровни доступа к админке для web-мастера
(фактически для того, кто создает сайт) и для администратора (того, кто управляет контентом: добавляет, удаляет страницы, редактирует их содержание). Web-мастер имеет возможность закрыть
для администратора ряд шаблонов табличных данных, а в открытых шаблонах закрыть некоторые
поля. В настройках web-мастер видит имена переменных, а в блоках имена переменных для шаблонизатора. Кроме того web-мастер видит все id страниц, меню, шаблонов, и т.д.
Настройки
В стандартном комплекте настроек присутствуют 3 группы: админка, блоки и переменные. Фактически все настройки являются переменными, значения которых можно редактировать из админки. Каждая такая переменная имеет свой тип (строка, целое число, и т.д.), имя, которое используется в php-кодах, и имя, которое используется в шаблонизаторе. Значения переменных, для которых указано значение имени в шаблоне, автоматически подставляются в шаблоны (если, конечно,
в них эти переменные указаны, смотрите главу Шаблонизатор). Кроме того все переменные могут
использоваться в php-коде движка, с доступом к ним через их имя.
Переменные, не имеющие имени для шаблона, могут использоваться только в php-коде. То есть,
не имеет смысла добавлять новую такую переменную без вмешательства в код.
На группы переменные разделены просто для удобства, реальных различий группы не имеют. Рекомендуется класть переменные, которые предполагается использовать для шаблонов в группу
«блоки» (с обязательным указанием имени для шаблона). В группе «админка» лежат переменные
по настройке админки, а в группе переменные все остальное.
Справочники
В шаблонах табличных данных есть тип «список». Он представляет собой ссылку на другой шаблон. То есть, для него в качестве значений используются данные указанного поля из другой таблицы. При этом может возникнуть ситуация, когда нам нужен шаблон, который не будет использоваться для создания страниц. Например, шаблон для таблицы со списком городов. Тогда у такого
шаблона надо отметить свойство «справочник». После этого шаблон не будет предлагаться для
создания страниц, а вместо этого появится новый подраздел в разделе «справочники», где и будет находиться требуемая нам таблица.
III.
Шаблонизатор
Общие положения
В CMS IT design весь вывод данных осуществляется с помощью шаблонизатора. Для своей работы
использует шаблоны. Шаблон представляет собой файл в формате html, в который внесены переменные и управляющие конструкции – макросы, благодаря которым можно программировать
весь вывод без вмешательства в код php. Файлы шаблонов имеют расширение tpl.
Переменные в шаблоне бывают двух видов: простая и блочная. Простая переменная в процессе
компиляции заменяется на значение, подставляемое из CMS. Блочная переменная может содержать в себе код html и собственные подчиненные переменные.
В CMS реализована возможность составления кода страницы из нескольких последовательных
шаблонов. Если на всех страницах шапка и подвал имеют один и тот же код, а различия только в
центральной части, то шапку и подвал можно вынести в отдельные шаблоны header.tpl и
footer.tpl. Для каждой страницы в CMS можно установить, надо ли подключать для нее header и
footer.
Простая переменная
Синтаксис:
{NAME}
Где NAME – имя переменной.
В CMS по умолчанию определены следующие общие переменные:
 BASE_URL – значение для тэга <base href="" />;
 SIMPLE_SEARCH_URL – адрес страницы результатов простого поиска;
 SIMPLE_SEARCH_TITLE – заголовок формы простого поиска;
 SIMPLE_SEARCH_BUTTON – заголовок кнопки поиска;
 ADMIN_LANG_CATALOG – физический адрес каталога языка в админке;
 ADMIN_JS_PATH – физический адрес каталога файлов javascript админки.
И переменные для отдельной страницы, которые берутся из настроек страницы в админке:
 META_TITLE – значение для тэга <title>;
 META_DESCRIPTION – значение для тэга <META content="" name="description" />;
 META_KEYWORDS – значение для тэга <META content="" name="keywords" />;
 PAGE_IMAGE – картинка, соответствующая странице;
 PAGE_IMAGE_WIDTH – ширина PAGE_IMAGE;
 PAGE_IMAGE_HEIGHT – высота PAGE_IMAGE;
 PAGE_IMAGE2 – вторая картинка, соответствующая странице;
 PAGE_IMAGE2_WIDTH – ширина PAGE_IMAGE2;
 PAGE_IMAGE2_HEIGHT – высота PAGE_IMAGE2;
 CONTENT – содержание страницы, редактируемое через DHTML редактор.
Кроме перечисленных выше переменных в шаблон подставляются переменные блоков из настроек (Конфигурация->Переменные). То есть, для всех переменных, имеющих параметр «идентификатор в шаблоне», их значения будут подставлены в шаблоны, на места переменных, соответствующих идентификаторам. То есть, если у нас в настройках определена переменная «подвал»,
которая имеет идентификатор в шаблоне «FOOTER», то при компиляции на место переменной
{FOOTER} в шаблоне будет подставлено значение этой переменной, определенное в админке.
Блочная переменная
Блочные переменные используются для вывода в цикле, а также для вывода сложно структурированных данных. Блочные переменные могут иметь собственные простые переменные, которые
вставляются в код внутри блока. Кроме того блочные переменные могут иметь подчиненные
блочные переменные, которые встроены внутрь родительских, и могут выводиться там своим
циклом. То есть, с помощью вложенных блочных переменных можно организовывать вложенные
циклы. Вложенность блочных переменных может быть любого уровня.
Синтаксис:
<!-- BEGIN var -->
код html {var.ITEM1} …
<!-- BEGIN subvar1 -->
код html {var.subvar1.ITEM1} код html {var.subvar1.ITEM2}
код html {var.subvar1.ITEM3} …
<!-- BEGIN subsubvar -->
код html {var.subvar1.subsubvar.ITEM1} …
<!-- END subsubvar -->
<!-- END subvar1 -->
<!-- BEGIN subvar2 -->
код html {var.subvar2.ITEM1}
<!-- END subvar2 -->
…
код html {var.ITEM2}…
<!-- END var -->
Где var, subvar, subsubvar – имена блочных переменных, а ITEM1, ITEM2 – имена простых переменных, подчиненных блочным. Кроме того, внутрь блочной переменной можно вставлять независящую от нее простую:
<!-- BEGIN main -->
{CONTENT}
<!-- END main -->
В данном примере содержимое переменной {CONTENT} будет выведено только в том случае, если
подключена блочная переменная main.
Пример шаблона:
<div class=”main”>
<!-- BEGIN menu -->
<!—BEGIN start -->
<div class=”menu”>
<!—BEGIN start -->
<!-- BEGIN passive -->
{menu. passive.NAME}
<!-- END passive -->
<!-- BEGIN active -->
<a href="{menu.active.URL}">{menu.active.NAME}</a>
<!-- END active -->
<!—BEGIN finish -->
</div>
<!—BEGIN finish -->
<!-- END menu -->
<div class=”content”>
{CONTENT}
</div>
</div>
Подключение шаблонов в шаблон
В шаблон могут вставляться данные из другого шаблона. Это позволяет делать шаблоны менее
громоздкими, а их код легко читаемым. Такая операция в CMS реализована через макросы типа %
(смотри раздел макросы). Например для отображения меню делается отдельный шаблон, который обрабатывается отдельно и получившийся код вставляется в основной шаблон на место макроса.
Условные конструкции в шаблонизаторе
В шаблонизаторе используется два типа условных конструкций. Условие на одно слово и блочное
условие.
Условие на одно слово
Пример.
<!-- BEGIN menu -->
<!-- BEGIN active -->
<div class=”menu”>
<a href=”{menu.active.URL}”>{menu.active.NAME}</a>
</div>
<!-- END active -->
<!-- END menu -->
Хотим, чтобы при выводе последний пункт меню был класса menu last. Для решения этой проблемы существует конструкция условия. Она имеет следующий синтаксис:
{if oper1(offset1) word1 elseif oper2(offset2) word2 else word3}
Где:
 oper — оператор условия;
 offset — сдвиг по уровню вложенных блоков;
 word — выражение, которое надо вывести (допустим вывод только одного слова в котором разрешены буквы, цифры и символы '-' и '_' ).
Допустимые операторы:
 first — первый элемент в цикле;
 last — последний элемент в цикле;
 odd — нечетные элементы;
 even — четные элементы.
Решение.
<!-- BEGIN menu -->
<!-- BEGIN active -->
<div class=”menu {if last(1) last}”>
<a href=”{menu.active.URL}”>{menu.active.NAME}</a>
</div>
<!-- END active -->
<!-- END menu -->
Более сложный пример.
<!-- BEGIN menu -->
<!-- BEGIN active -->
<div class=”menu {if last(1) last elseif first(1) first elseif delimodd(1) odd else simple}”>
<a href=”{menu.active.URL}”>{menu.active.NAME}</a>
</div>
<!-- END active -->
<!-- END menu -->
Условие на блок
Синтаксис:
<!-- IF cond -->
text
<!-- ELSEIF cond -->
text
<!-- ELSE -->
text
<!-- ENDIF -->
Где cond — конструкция условия. Ее синтаксис допускает использование операторов из предыдущей главы, но без указания сдвига по уровням. Кроме того операторы могут объединяться в
условные конструкции, в которых допустимо использование условных операторов AND, OR, NOT ()
и скобок.
NB! оператор NOT применяется только со скобками.
Пример: NOT (first).
Пример условной конструкции:
first OR (delimodd AND NOT (last))
Пример использования:
<!-- BEGIN menu -->
<!-- IF even OR last -->
<!-- BEGIN active -->
<a href="{menu.active.URL}" class="even">{menu.active.NAME}</a>
<!-- END active -->
<!-- ELSE -->
<!-- BEGIN active -->
<a href="{menu.active.URL}" class="odd">{menu.active.NAME}</a>
<!-- END active -->
<!-- ENDIF -->
<!-- END menu -->
Шаблон формы
Схема блоков:
 formerror (TEXT)
 formreport (TEXT)
 formbegin
 field
 def (TITLE, INPUT)
 obl
 любые имена, описанные в свойстве поля input_block (TITLE, INPUT)
 obl
 captcha (NAME, ID, TITLE, IMG)
 formsubmit (VALUE)
 formend
Кроме блочных переменных в шаблоне формы существуют следующие простые переменные:
 FORM_VALIDATE_JS
 FORM_OPEN
 CAPTCHA_REFRESH_JS
 FORM_CLOSE
formerror: блок, в который выводятся сообщения об ошибках. TEXT – текст ошибки.
formreport: сообщения о результатах работы формы (не ошибки). TEXT – текст сообщения.
formbegin: код, следующий перед формой.
field: блок, в который подключаются поля формы, по умолчанию поле подключается в подблок
def, а если указано свойство поля input_block, то в подблок, имя которого совпадает со значением
этого свойства. TITLE – заголовок поля, INPUT – тэг элемента формы (<input>, <textarea>,…)
obl: признак обязательного поля.
captcha: капча. NAME – имя тэга input для ввода данных с капчи, ID – id тэга <img> капчи , TITLE заголовок, IMG – адрес, с которого берется капча.
formsubmit: кнопка submit формы. VALUE – надпись на кнопке.
formend: код после формы.
FORM_VALIDATE_JS: javascript для обработки введенных данных и отправки формы.
FORM_OPEN: тэг <form>.
CAPTCHA_REFRESH_JS: javascript для обновления капчи.
FORM_CLOSE: тэг </form>.
IV.
Организация табличных данных
В CMS IT design структуры типа новостей, фотогалереи, каталога товаров организуются с помощью
страниц табличного типа. В основе каждой такой страницы лежит таблица, базирующаяся на шаблоне таблицы, который настраивается через раздел админки «Конфигурация –> Шаблоны». При
выдаче такой страницы на нее автоматически выводятся элементы этой таблицы структурированные, как задано в шаблоне страницы (файле tpl). При этом данные при выдаче будут разбиты на
страницы. Количество элементов на одной странице устанавливается в настройках шаблона. Кроме того, для шаблона таблицы можно указать, что каждому ее элементу соответствует отдельная
страница, тогда у этой страницы автоматически появляются подчиненные страницы в количестве,
равном количеству элементов ее таблицы. В отличие от страниц, реально существующих в дереве
содержания сайта, будем называть такие страницы виртуальными, или страницами отдельных
элементов таблицы.
Адреса (url) виртуальных страниц может организовываться двумя способами. Первый – автоматический, адрес формируется из id записи и префикса, который определяется в настройках шаблона.
Второй – вручную, если среди полей шаблона есть поле с именем page_url, то это поле считается
адресом страницы.
Создание шаблона таблицы
Шаблон таблицы создается через форму в разделе «Конфигурация –> Шаблоны». В форме создания шаблона требуется следующие параметры:
 название – название шаблона, как оно будет отображаться в админке;
 имя в БД – имя таблицы в базе данных (если его не указывать, то оно будет сгенерировано
автоматически по принципу tableN, где N – номер таблицы));
 уровень пользователя – уровень пользователя, который будет видеть этот шаблон.
Для полей таблицы требуется указать следующие данные:
 название – название поля, как оно будет отображаться в админке и на сайте (поэтому в
разных языковых версиях разные значения этого параметра);
 имя в БД – имя поля в базе данных (если его не указывать, то оно будет сгенерировано автоматически по принципу fieldN, где N – номер поля), этот параметр рекомендуется указывать, так как он используется в качестве имен переменных в шаблоне страницы;
 тип – тип поля (строка, дата, число, и т.д.);
 уровень пользователя – уровень пользователя, который будет видеть это поле;
 обязательное поле (чекбокс);
 уникальное поле (чекбокс) – если отмечено, то в таблице значения этого поля не могут повторяться;
 показывать в таблице администратора (чекбокс).
Кроме указанных свойств, для шаблона и его полей существует еще ряд свойств, которые редактируются после создания шаблона. Для редактирования этих свойств нужно зайти в форму редактирования шаблона и нажать на значок стрелки после названия шаблона (для редактирования
шаблона), или любого его поля (для редактирования поля).
В шаблоне дополнительно присутствуют следующие свойства:
 уровень пользователя для редактирования шаблона - уровень пользователя, который
имеет доступ к редактированию шаблона;
 справочник – если отмечено, то шаблон становится шаблоном справочника, то есть на его
основе нельзя делать страницы, и он используется только для полей типа «список»;
 количество записей на странице – количество записей, которое выдается на одной странице списка;
 количество основных записей – количество записей, которое выводится макросом
%short_list();
 заголовок ссылки на список – если на страницах с отдельными элементами таблицы присутствует ссылка на базовую страницу (со списком), то в это поле вводится текст ссылки;
 сортировать по полю – поле, по которому записи сортируются при выдаче, если стоит значение вручную, то сортировка происходит в админке вручную в разделе «порядок записей»;
 сортировать в порядке возрастания – по умолчанию сортировка происходит в обратном
порядке;
 запретить отдельные страницы для элементов – если отмечено, то для элементов таблицы
не существует отдельных страниц;
 префикс в URL – префикс к адресу для страницы табличной записи;
 поле-заголовок – поле, которое используется в качестве meta title (тэг <title>), если не существует поле meta_title.
Для каждого поля имеется индивидуальный набор параметров для его настройки, в зависимости
от его типа. Но существует два свойства, общих для всех полей:
 блочный вывод – если отмечено, то в шаблоне поле выводится как блочная переменная;
 показывать в списке – не отмеченные поля не будут показаны в списке, NB! Должно быть,
как минимум, одно поле с этой опцией.
Зарезервированные поля
Некоторые из имен полей (под именем поля подразумевается имя в БД) зарезервированы для
специальных целей, то есть, если поле имеет зарезервированное имя, то оно будет обрабатываться определенным образом.
Список зарезервированных полей:
 page_url – url страницы, если среди полей шаблона есть такое поле, то это поле считается
адресом страницы;
 published – типа bool, если значение равно false, то запись не выводится ни в списке, ни на
отдельной странице;
 page_title – заголовок страницы;
 meta_title – значение для тэга <title>;
 meta_description – значение для тэга <META content="" name="description" />;
 meta_title – значение для тэга <META content="" name="keywords" />.
Шаблон страницы
Для страницы табличного типа должно быть создано два шаблона страниц: шаблон для выдачи
списка и шаблон страницы отдельного элемента. Имя шаблона для страницы отдельного элемента должно быть (обязательно!) таким же, как и шаблона для списка, но с добавлением цифры «1»
в конец имени. Например, для новостей могут быть созданы шаблоны news.tpl и news1.tpl. Если
отдельные страницы для элементов таблицы не предусмотрены, то шаблон для них можно не создавать.
Шаблон страницы списка
Блочная переменная для вывода в цикле элементов таблицы называется object, а имена, подчиненных ей простых переменных, совпадают с именами полей в базе данных, но переведены в
верхний регистр. В начале и конце шаблона могут идти блоки object_start и object_finish, которые
выводятся перед списком объектов и после него соответственно, если в таблице есть элементы.
Например, если у нас есть табличный шаблон новостей с полями title (строка), date (дата) и text
(статья), то шаблон для него может выглядеть так:
<!-- BEGIN object_start -->
<div class=”news”>
<!-- END object_start -->
<!-- BEGIN object -->
<div class=”title”>{object.TITLEE}</div>
<div class=”date”>{object.DATE}</div>
<p>{object.TEXT }</p>
<!-- END object -->
<!-- BEGIN object_finish -->
</div>
<!-- END object_finish -->
При этом в переменную {object.TEXT} будет выведена не вся статья, а только ее начало, обрезанное на конце слова в районе 256-го символа.
Если у поля стоит признак «блочный вывод», то это поле будет выводиться, как блочная переменная. В общем случае ее имя будет совпадать с именем поля в БД, и у нее будут подчиненные переменные VALUE, TITLE, NAME и ID. Где VALUE – значение из БД, TITLE – имя поля (с учетом языка),
NAME – имя поля в БД, ID – id элемента. Если значение поля нулевое, или не установлено, то оно
выводиться не будет. Для некоторых типов полей в блочном выводе спектр подчиненных расширен, список таких типов, и их переменные при блочном выводе описаны ниже. Если в предыдущий пример мы добавим поле иконка (имя в БД icon, тип картинка), которое должно выводиться
перед новостью (а в случае, если этой картинки нет, то не выводиться) и поставим этому полю
свойство «блочный вывод», то шаблон примет такой вид:
<!-- BEGIN object_start -->
<div class=”news”>
<!-- END object_start -->
<!-- BEGIN object -->
<!-- BEGIN icon -->
<img src=”{object.icon.VALUE}” alt=”{object.icon.TITLE}”>
<!—END icon -->
<div class=”title”>{object.TITLE}</div>
<div class=”date”>{object.DATE}</div>
<p>{object.TEXT }</p>
<!-- END object -->
<!-- BEGIN object_finish -->
</div>
<!-- END object_finish -->
Шаблон страницы отдельного элемента
Имена переменных в шаблоне для страницы отдельного элемента таблицы совпадают с именами
полей в базе данных, но переведены в верхний регистр. Поля с признаком «блочный вывод» выводятся по тем же правилам, что и в шаблоне списка. Таким образом, для примера из предыдущего раздела шаблон может выглядеть так:
<h1>{TITLE}</h1>
<!-- BEGIN icon -->
<img src=”{ icon.VALUE}” alt=”{ icon.TITLE}”>
<!—END icon -->
{TEXT}
<div class=”date”>{object.DATE}</div>
Поля с расширенным набором переменных для вывода
В настоящее время существуют следующие типы данных с расширенным набором переменных:
image, currency.
Если переменная с расширенным набором параметров выводится не в блочном режиме, то имена
ее переменных (за исключением VALUE) формируются из имени поля в БД, к которому через знак
«_» добавлено имя переменной. Например, если у нас есть поле с именем в БД icon типа картинка, то имена ее переменных будут такими: ICON, ICON_WIDTH, ICON_PREVIEW, и т.д. В переменную
ICON будет выведено значение VALUE.
Дополнительные переменные для типа image.
Блочные:
 WIDTH – ширина изображения;
 HEIGHT – высота изображения;
 PREVIEW – адрес превью (то, что подставляется в src);
 PREVIEW_WIDTH – ширина превью;
 PREVIEW_HEIGHT – высота превью.
Пример:
<!-- BEGIN icon -->
<a href=”{icon.VALUE}”><img src=”{icon.PREVIEW}” alt=”{icon. TITLE}” width=”{icon. PREVIEW_WIDTH}”
height=”{icon. PREVIEW_HEIGHT}”></a>
<!-- END icon -->
Обычные (NAME заменяется на имя поля в БД):
 NAME_WIDTH – ширина изображения;
 NAME_HEIGHT – высота изображения;
 NAME_PREVIEW – адрес превью (то, что подставляется в src);
 NAME_PREVIEW_WIDTH – ширина превью;
 NAME_PREVIEW_HEIGHT – высота превью.
Пример:
<a href=”{ICON}”><img src=”{ICON_PREVIEW}” alt=”{ICON_TITLE}” width=”{ICON_PREVIEW_WIDTH}”
height=”{ICON_PREVIEW_HEIGHT}”></a>
Дополнительные переменные для типа currency:
Блочные:
 VALUE_NAME – название валюты (руб., $, €, и т.д.)
Пример:
<!-- BEGIN curr -->
{curr.VALUE} {curr.VALUE_NAME}
<!-- END curr -->
Обычные (NAME в начале заменяется на имя поля в БД):
 NAME_NAME – название валюты (руб., $, €, и т.д.)
Пример:
{CURR} {CURR_NAME}
V.
Макросы
Описание
В шаблонизатор можно вставлять команды для вывода различных конструкций. Например, меню,
формы контактов, хлебных крошек, и т.д. Таким образом, все управление выводом осуществляется непосредственно из шаблонизатора, без вмешательства в код php.
Например, для вывода меню в шаблонизаторе достаточно написать такой макрос: {%menu()}.
Синтаксис макросов следующий:
{%macros(
var1=val1
var2=val2
…
)}
или
{#macros(
var1=val1
var2=val2
…
)}
Здесь macros – имя макроса (например, menu); var1, var2 – имена переменных; val1, val2 – их значения. Макросы могут быть двух видов, которые различается по префиксу перед именем макроса:
%, или #.
Макрос типа % использует для вывода отдельный шаблон, который вставляется в основной на
место расположения макроса. Шаблоны для меню (макрос %menu) должны лежать в каталоге
/templates/menu/, а все остальные шаблоны в каталоге /templates/block/.
Макрос типа # использует для вывода код, расположенный в том же шаблоне. То есть в отличие
от типа %, где макрос заменяется на код отдельного шаблона, в макросах типа # их текст при компиляции удаляется, а для вывода используются переменные из основного шаблона.
Переменные могут быть двух видов: обычная переменная (строка, число, …) и массив. Массивы
могут быть ассоциативными (в котором сопоставляются пары ключ=значение) и обычными (состоящими из списка значений). Массив имеет следующий синтаксис:
var=(”val1”,”val2”,…)
или для ассоциативного массива:
var=(item1=”val1”,item2=”val2”,…)
В обычной переменной ее значением считается все, что следует после первого знака = до символа
следующей строки, или до конца макроса. Пробельные символы в начале и конце обрезаются. В
массиве значением одной из его переменных считается все, что заключено в двойные кавычки.
Все переменные в макросах (за редким исключением) имеют значения по умолчанию, что позволяет в простейших случаях использовать макросы без параметров.
В случае необходимости дать разные значения переменой для разных языковых версий используется следующая конструкция:
var[l]=val
или, для массивов
var[l]=(item1=”val1”,item2=”var2”,…)
где l – id языка, для которого используется значение. То есть, если у нас есть 3 языка с id, равными
1, 2 и 3, то переменная var для них будет иметь такой вид:
var[1]=val1
var[2]=val2
var[3]=val3
Общие правила при составлении шаблонов можно сформулировать так:
 каждая новая переменная должна быть написана с новой строки;
 в массиве значения должны быть заключены в двойные кавычки;
 в массиве значения должны быть разделены запятыми;
 значение переменной не может содержать символов новой строки;
 значение переменной массива не может содержать символов двойной кавычки.
В CMS определены следующие макросы:
 Менюmenu
 breadcrumbs
 nav_panel
 langs
 short_list
 contact_form
 page_children
 question_form
Меню
Выводит одноуровневое, или двухуровневое меню (в том числе выпадающее меню).
Синтаксис
%menu()
Опции
Опция
tpl
menu_id
level
type
show_main_page
no_this_page
Значение по умолчанию
main_menu
1
1
onelevel
true
false
Шаблон
Схема блоков:
 start
 menu
 passive (ID, NAME)
 submenu
o substart
o pass (ID, NAME)
 subdelim
o act (ID, URL, NAME)
 subdelim
o subfinish
 delim
 active (ID, URL, NAME)
 submenu
o substart
o pass (ID, NAME)
 subdelim
o act (ID, URL, NAME)
 subdelim
o subfinish
 delim
 finish
Описание
Ссылка на шаблон.
ID меню.
Уровень, с которого требуется начинать вывод.
Например, если level=2, то в случае, если мы
находимся на странице первого уровня, то будут
выведены подразделы этой страницы; если на
страницы второго, или большего уровня, то подразделы предка первого уровня.
Тип меню. Возможные варианты: onelevel,
twolevel, twolevel_all; onelevel – выводятся только страницы уровня level; twolevel – выводятся
страницы уровня level и страницы следующего
уровня для предка уровня level текущей страницы; twolevel_all – выводятся страницы уровня
level и level+1.
Показывать главную страницу (если true).
Не показывать текущую страницу (если true).
start, finish: код, соответственно, предваряющий и завершающий меню.menu: собственно меню.
passive: пункт меню, с которого не идет ссылки (текущая страница, или страница типа «пункт меню»). В нем переменная ID – id страницы (может использоваться, например, для javascript при
создании выпадающего меню), NAME – название страницы.
active: пункт меню, являющийся ссылкой. Переменные ID и NAME такие же, как в блоке passive,
URL – адрес страницы.
delim: разделитель между пунктами меню.
submenu: страницы следующего уровня (level+1). В нем блоки substart, subfinish, pass, act и subdelim выполняют те же функции, что и блоки start, finish, passive, active и delim для страниц базового
уровня.
Примеры
Одноуровневое меню
Макрос:
{%menu()}
Шаблон:
<!-- BEGIN start -->
<div class=”menu”>
<!-- END start -->
<!-- BEGIN menu -->
<!-- BEGIN passive -->
<div class="passive">{menu.passive.NAME}</div>
<!-- BEGIN delim -->
<div class="separator"></div>
<!-- END delim -->
<!-- END passive -->
<!-- BEGIN active -->
<a href="{menu.active.URL}">{menu. active.NAME}</a>
<!-- BEGIN delim -->
<div class="separator"></div>
<!-- END delim -->
<!-- END active -->
<!-- END menu -->
<!-- BEGIN finish -->
</div>
<!-- END finish -->
Результат работы:
Двухуровневое меню
Макрос:
{%menu(
tpl=vert_menu
menu_id=3
type=twolevel_all
)}
Шаблон:
<!-- BEGIN start -->
<div class=”menu”>
<!-- END start -->
<!-- BEGIN menu -->
<!-- BEGIN passive -->
<div class="passive">{menu.passive.NAME}</div>
<!-- BEGIN submenu -->
<!-- BEGIN substart -->
<div class="child_menu" id="item{menu.passive.ID}">
<!-- END substart -->
<!-- BEGIN act -->
<a href="{menu.passive.submenu.act.URL}">{menu.passive.submenu.act.NAME}</a>
<!-- END act -->
<!-- BEGIN pass -->
<a>{menu.passive.submenu.pass.NAME}</a>
<!-- END pass -->
<!-- BEGIN subfinish -->
</div>
<!-- END subfinish -->
<!-- END submenu -->
<!-- BEGIN delim -->
<div class="separator"></div>
<!-- END delim -->
<!-- END passive -->
<!-- BEGIN active -->
<a href="{menu.active.URL}">{menu. active.NAME}</a>
<!-- BEGIN submenu -->
<!-- BEGIN substart -->
<div class="child_menu" id="item{menu.active.ID}">
<!-- END substart -->
<!-- BEGIN act -->
<a href="{menu.active.submenu.act.URL}">{menu.active.submenu.act.NAME}</a>
<!-- END act -->
<!-- BEGIN pass -->
<a>{menu.active.submenu.pass.NAME}</a>
<!-- END pass -->
<!-- BEGIN subfinish -->
</div>
<!-- END subfinish -->
<!-- END submenu -->
<!-- BEGIN delim -->
<div class="separator"></div>
<!-- END delim -->
<!-- END active -->
<!-- END menu -->
<!-- BEGIN finish -->
</div>
<!-- END finish -->
Результат работы:
Bredcrumbs
Выводит список всех предков страницы (хлебные крошки, breadcrumbs).
Синтаксис
%breadcrumbs()
Опции
Опция
tpl
show_main_page
show_this_page
show_table_page
Значение по умолчанию
bredcrumbs
true
true
false
Шаблон
Схема блоков:
 start
 bc
 passive (NAME)
Описание
Ссылка на шаблон.
Показывать главную страницу (если true).
Показывать текущую страницу (если true).
Показывать страницу табличного элемента (если
true).


 finish
 delim
active (URL, NAME)
 delim
this (NAME)
start, finish: код, соответственно, предваряющий и завершающий breadcrumbs.
bc: собственно breadcrumbs.
passive: пункт, с которого не идет ссылки (страница типа «пункт меню»). В нем переменная NAME
– название страницы.
active: пункт меню, являющийся ссылкой. Переменная NAME – название страницы, URL – адрес
страницы.
delim: разделитель между пунктами меню.
Примеры
Макрос:
{%breadcrumbs()}
Шаблон:
<!-- BEGIN start -->
<div id="breadcrumb">
<!-- END start -->
<!-- BEGIN bc -->
<!-- BEGIN active -->
<a href="{bc.active.URL}">{bc.active.NAME}</a>
<!-- BEGIN delim -->
  //  
<!-- END delim -->
<!-- END active -->
<!-- BEGIN passive -->
{bc.passive.NAME}
<!-- BEGIN delim -->
  //  
<!-- END delim -->
<!-- END passive -->
<!-- BEGIN this -->
{bc.this.NAME}
<!-- END this -->
<!-- END bc -->
<!-- BEGIN finish -->
</div>
<!-- END finish -->
Результат работы:
Панель навигации
Выводит панель навигации. Как правило, это ссылки на главную страницу, карту сайта и контакты
в виде иконок:
Синтаксис
%nav_panel()
Опции
Опция
tpl
elements
urls
Значение по умолчанию
bredcrumbs
(“home”,”sitemap”,”contacts”)
false
Описание
Ссылка на шаблон.
Массив элементов для панели.
Массив с нестандартными (смотри примечание) URL. Например, при нажатии на иконку
контактов должен отправляться e-mail, то в качестве значения параметра urls надо указать
(contacts=”mailto:mail@address.ru”). Если указать значение mailto:default, то default будет
заменено на значение контактного e-mail из
настроек админки.
Примечание: значения массива elements должны соответствовать значениям параметра handling для страниц из таблицы PAGES, или для них должен быть прописан URL в массиве urls. В
противном случае это значение будет проигнорировано. По умолчанию в базе данных существуют страницы home, sitemap и contacts.
Шаблон
Схема блоков:
 element_passive (URL, NAME)
 element_active (URL, NAME)
element_passive, element_active: element заменяется на объект из массива elements (например,
home_passive), как обычно, с passive ссылки нет, а с active есть. URL – ссылка, NAME – название
страницы.
Примеры
Макрос:
{%nav_panel(urls=(contacts="mailto:default"))}
Шаблон:
<!-- BEGIN home_passive -->
<img src=”images/home_pass.gif” alt=”{home_passive.NAME}”>
<!-- END home_passive -->
<!-- BEGIN home_active -->
<a href="{home_active.URL}"><img src=”images/home.gif” alt=”{home_passive.NAME}”></a>
<!-- END home_active -->
<!-- BEGIN sitemap_passive -->
<img src=”images/map_pass.gif” alt=”{sitemap_passive.NAME}”>
<!-- END sitemap_passive -->
<!-- BEGIN sitemap_active -->
<a href="{sitemap_active.URL}"><img src=”images/map_pass.gif” alt=”{sitemap_active.NAME}”>
{sitemap_active.NAME}</a>
<!-- END sitemap_active -->
<!-- BEGIN contacts_passive -->
<img src=”images/home.gif” alt=”{contacts_passive.NAME}
<!-- END contacts_passive -->
<!-- BEGIN contacts_active -->
<a href="{contacts_active.URL}">{contacts_active.NAME}</a>
<!-- END contacts_active -->
Результат работы:
Панель языков
Выводит меню перехода на другие языковые версии сайта.
Синтаксис
%langs()
#langs()
Опции
Опция
tpl
show_this_lang
Значение по умолчанию
langs
false
Описание
Ссылка на шаблон.
Показывать текущий язык (если true).
Шаблон
Схема блоков:
 start
 lang
 passive (ID, NAME, SHORT_NAME, FLAG)
 delim
 active (ID, URL, NAME, SHORT_NAME, FLAG)
 delim
 this (NAME)
 finish
start, finish: код, соответственно, предваряющий и завершающий панель языков.
lang: блок языка.
passive: текущий язык, с которого не идет ссылки. В нем переменная ID – id языка; NAME – название языка (например «Русский»); SHORT_NAME – краткое название языка (например «рус»); FLAG
– картинка, символизирующая язык (как правило, флаг страны).
active: язык, на который идет ссылка. URL – ссылка на языковую версию (при симметричной языковой версии ссылка ведет на ту же страницу, на которой находимся в настоящий момент, но в
другой языковой версии, при ассиметричной – на главную страницу). Остальное так же, как для
passive.
delim: разделитель между пунктами языками.
Примеры
Макрос:
{%langs()}
Шаблон:
<!-- BEGIN lang -->
<!-- BEGIN active -->
<a href="{lang.active.URL}"><img src=”{lang.active.FLAG}” alt=”{lang.active.SHORT_NAME}”
title=”{lang.active.NAME}”></a>
<!-- END active -->
<!-- BEGIN passive -->
<img src=”{lang.passive.FLAG}” alt=”{lang.passive.SHORT_NAME}” title=”{lang.passive.NAME}”>
<!-- END passive -->
<!-- END lang -->
Результат работы:
Краткий список табличных объектов
Часто требуется вывести выборочный список из табличных данных. Например, вывести на главной
странице сайта последние новости. Данный макрос служит как раз для этой цели.
Синтаксис
%short_list()
Опции
Опция
tpl
show_this_lang
Значение по умолчанию
langs
false
Описание
Ссылка на шаблон.
Показывать текущий язык (если true).
Шаблон
Схема блоков:
 object_start
 object (все поля данного объекта)
 object_finish
Шаблон для этого макроса составляется так же, как и для страниц с полным списком.
Форма контактов
Выводит форму контактов с полями «имя», «e-mail», «телефон» (может не быть), «сообщение»
(поле textarea).
Синтаксис
%contact_form()
#contact_form()
Опции
Опция
form_tpl
form_name
titles
Значение по умолчанию
form
Берется из настроек текущего языка
form_lang.php.
Описание
Ссылка на шаблон формы. Используется только
для % режима.
Параметр name тэга <form>.
Массив заголовков полей. Содержит переменные name, email, phone, message. Если переменная phone отсутствует, то поле «телефон» не вы-
input_style
textarea_style
email_to
email_subject
Берется из переменной
«Контактный e-mail» в
админке.
Берется из переменной
«Тема контактного email» в админке.
email_text_before
email_text_after
водится. Пример: (name=”Имя”, email=”E-mail”,
phone=”Телефон”, message=”Текст письма”). Для
разных языков представляем titles в виде массива, например: titles[2]= (name=”Name”, email=”Email”, message=”Message”).
Массив параметров для тэга input. Например:
(class=”contact”, style=”width: 200px;”).
Массив параметров для тэга textarea. Например:
(class=”contact”, rows=”7”).
E-mail адрес получателя.
Тема (subject) письма.
Текст, который выводится перед данными, полученными из формы.
Текст, который выводится после данных, полученных из формы.
Шаблон
Используется обычный шаблон формы.
Примеры
Макрос:
{%contact_form(
titles=(name=”Ваше имя”, email=”E-mail”, phone=”Телефон”, message=”Сообщение”)
input_style=(class=”contact”)
textarea_style=(class=”contact”, rows=”5”)
)}
Результат работы:
Подразделы страницы
Выводит подразделы (потомков) текущей страницы.
Синтаксис
#page_children()
Опции
Опция
page_id
Значение по умолчанию
false
menu_id
content_length
false
image
false
show_elements_count
false
min_level
1
Описание
Id страницы потомков которой надо вывести,
если false, то потомков текущей страницы, если
“parent”, то потомков предка текущей страницы.
Id меню, в котором брать дочерние страницы
(нужно, например, если текущая страница
главная ).
Если не false, то выводит содержимое страницы до content_length символов. При этом из
контента вырезаются все тэги. Контент обрезается не точно на указанном символе, а на конце ближайшего слова. Если равен 0 (нулю), то
выводится весь контент.
Выводить картинку, соответствующую странице (если true).
Показывать количество элементов в табличных
страницах (если true).
Минимальный уровень страниц для вывода
(иногда нужен, чтобы не дублировать меню).
Шаблон
Схема блоков:
 page_start
 page (URL, NAME, CONTENT, COUNT)
 image (VALUE,WIDTH,HEIGHT)
 delim
 page_finish
page_start, page_finish: код, предваряющий и завершающий меню блок.
page: собственно страница. URL – адрес страницы, NAME – название страницы, CONTENT – содержание страницы, обрезанное до content_length символов (если content_length не false), COUNT –
количество элементов на странице (если она табличного типа).
image: картинка, соответствующая странице. VALUE, WIDTH, HEIGHT – адрес, высота и ширина картинки.
delim: разделитель между подразделами.
Примеры
Макрос:
{#page_children(
page_id=parent
content_length=300
image=true
)}
Шаблон:
<!-- BEGIN page_start -->
<div id="pages_list">
<!-- END page_start -->
<!-- BEGIN page -->
<!-- BEGIN image -->
<img src=”{page.image.VALUE}” width=”{page. image.WIDTH}” height=”page. image.HEIGHT”
alt=”page.NAME”>
<!—END image -->
{page.NAME} ({page.COUNT})<br />
<p>{page.CONTENT}</p>
<!-- BEGIN delim -->
<div class=”separator”></div>
<!—END delim -->
<!—END page -->
<!-- BEGIN page_finish -->
</div>
<!-- END page_finish -->
Результат работы:
Форма вопроса
Выводит форму на странице вопрос-ответ с двумя полями «Имя» и «Вопрос» (поле textarea). Данные формы добавляются к вопросам в таблицу вопрос-ответ и отправляются по e-mail.
Синтаксис
%question_form()
Опции
Опция
form_tpl
form_name
input_style
Значение по умолчанию
form
textarea_style
email
false
Шаблон
Используется обычный шаблон формы.
Примеры
Макрос:
{%question_form(
input_style=(class=”question”)
textarea_style=(class=”question”, rows=”7”)
)}
Результат работы:
Описание
Ссылка на шаблон формы.
Параметр name тэга <form>.
Массив параметров для тэга input. Например:
(class=”question”, style=”width: 200px;”).
Массив параметров для тэга textarea. Например:
(class=”question”, rows=”7”).
Запрашивает email (если true).
Download