Изменения

Перейти к навигации Перейти к поиску

Шаблоны страниц

12 034 байта добавлено, 17:02, 28 апреля 2021
Нет описания правки
[[Категория:Термины]]
'''Шаблон''' – это текст в формате HTML с мета-вставками, соответствующими синтаксису движка шаблонов Smarty и указывающими места, в которые будут подставляться поля данных контента и/или каких-либо других объектов. Каждый [[веб-сайт]], построенный с помощью Nemo CMS, имеет связанный с ним список шаблонов.
Редактирование списка шаблонов сайта доступно из раздела '''«Управление контентом - Nemo CMS - Шаблоны»'''.
 
== Создание и настройка шаблона ==
 
Для создания нового шаблона нажмите на ссылку '''«Создать шаблон»'''.
 
'''Настройки шаблона:'''
*'''Файл шаблона''' - физическое имя файла, в котором сохраняется шаблон;
*'''Заголовок шаблона''' - понятный для пользователя текстовый заголовок шаблона, который будет использоваться при выводе списков шаблонов для блоков, элементов и макетов страниц;
*'''Шаблон''' - HTML-верстка шаблона;
*'''Использовать WYSIWYG редактор''' - переключение редактора шаблона с ввода текста на работу с визуальным редактором (иногда это необходимо, т.к. визуальные редакторы могут менять верстку и обрезать теги и их атрибуты самостоятельно, что не всегда требуется).
 
{{Attention|В шаблонах Nemo CMS '''запрещено''' использование PHP кода. В рамках Nemo CMS используется Smarty (компилирующий обработчик шаблонов для PHP) и возможно использование только тегов Smarty.}}
 
== Файлы шаблонов ==
 
Имена шаблонов могут быть любыми. Но для того, чтобы они могли быть использованы в качестве шаблонов элементов, блоков и макетов страниц, они должны соответствовать определенному формату. Для упрощения задачи формирования корректного с точки зрения системы имени файла рекомендуется использовать конструктор. Для того, чтобы начать работу с конструктором имени файла шаблона, нажмите на ссылку '''«Конструктор»''' у соответствующего поля.
 
Если необходимо создать шаблон для блока элементов, то нужно выполнить следующие действия:
 
1. В поле '''«Применяемость»''' выбрать пункт «Блок»;<br>
2. В поле '''«Суффикс»''' ввести уникальную строку, идентифицирующую ваш шаблон.
 
В поле имени файла будет сформировано корректное имя файла шаблона, который можно будет использовать с блоками элементов.
 
<span style="background-color:#fff0f5;"><span style="font-size:large;"><span style="color:#ff0000;">!</span></span> Для имен файлов шаблонов используйте только латиницу, а также не используйте знаки препинания, пунктуации и символ пробела.
 
Для создания шаблона для макета страницы используется аналогичная методика:
 
1. В поле '''«Применяемость»''' выбрать пункт «Страница»;<br>
2. В поле '''«Суффикс»''' ввести уникальную строку, идентифицирующую ваш шаблон.
 
Как видно на рисунках, в зависимости от применяемости шаблона к имени добавляется префикс «block» или «page» для блока и макета страницы соответственно.
 
В случае с шаблонами элементов макета страницы появляются дополнительные параметры:
*В поле '''«Применяемость»''' выбрать пункт «Страница»;
*В поле '''«Модуль»''' выбрать модуль, для которого будет использован данный шаблон;
*В поле '''«Формат»''' выбрать тип данных, который будет представлять шаблон;
*В поле '''«Суффикс»''' ввести уникальную строку, идентифицирующую ваш шаблон.
 
== Обработка классов шаблонов. Правила генерации wsdl ==
 
Вся генерация основывается на иерархии веток классов и комментариях на свойствах и методах. Комментарии должны быть в формате phpdoc, т.е. начинаться с /**. Первым обрабатывается класс "сервер" и его методы. По комментариям выясняются классы оболочки, затем - вложенные свойства в этих классах и т.д.
 
Для настройки свойств существуют следующие возможности:
 
Чтобы свойство стало атрибутом, а не просто вложенным тегом, необходимо в комментариях добавить пометку @attribute
 
Пример:
 
<pre>/**
* @attribute
* @var int
*/
public $MyProperty</pre>
 
Если в xml надо получить массив, указываем так: <pre>тип[]</pre>
Если не указан @keyname (см. ниже), то вложенные элементы будут иметь название как и родитель, только в единственном числе.
 
Например:
 
Languages -> Language
 
Поддерживаются обычные php типы + все доступные в XMLSchema, такие как positiveInteger, decimal, и т.д.
 
== Дополнительные phpdoc команды ==
 
*'''@attribute'''
 
Для того чтобы создать элемент типа
 
<element attrname="attr value">element value</element>
 
необходимо обьявить атрибуты как указано ранее - с пометкой @attribute с любым именем, а само значение (element value) должно иметь имя "_"
 
К примеру:
 
<pre>class NemoService_Param_Price
{
/**
*
* @var float
*/
public $_;
 
/**
*
* @attribute
* @var string
*/
public $Currency;
}</pre>
 
*'''@optional'''
 
Пометка сделает элемент необязательным.
 
<pre>
/**
*
* @attribute
* @optional
* @var string
*/
public $Currency;</pre>
 
*'''@keyname'''
 
Имя для элемента массива.
 
Если обьявлется вложенный массив, то keyname должны идти в том же порядке друг за другом.
 
К примеру:
 
@keyname arrOfStr
@keyname str
 
@var string[][]
 
*'''@unbounded'''
 
Пометка позволяет делать более сложные массивы, где заглавный элемент также может иметь атрибуты. К примеру, чтобы получить такую структуру:
 
<pre> <Supar Code="XYX" Type="OW">
<SuperItem>
<Id>1</Id>
<Name>One</Name>
</SuperItem>
<SuperItem>
<Id>2</Id>
<Name>Two</Name>
</SuperItem>
</Supar></pre>
 
необходимо обьявить элемент Supar следующим образом:
 
<pre> /**
*
* @unbounded
*
* @var NemoService_General_Request_Test_SuperItem
*/
public $SuperItem;
 
/**
*
* @attribute
* @var string
*/
public $Code;
 
/**
*
* @attribute
* @var string
*/
public $Type;</pre>
 
Как видно из примера, здесь у свойства, которое будет элементом массива, не надо писать [], достаточно пометки @unbounded.
Интерпретируется обратно в обьект даже симпатичней, чем обычный массив:
<pre>[Supar] => stdClass Object
(
[SuperItem] => Array
(
[0] => stdClass Object
(
[Id] => 1
[Name] => One
)
[1] => stdClass Object
(
[Id] => 2
[Name] => Two
)
)
[Code] => XYX
[Type] => OW
)</pre>
 
 
<span style="background-color:#fff0f5;"><span style="font-size:large;"><span style="color:#ff0000;">!</span></span> Входной фильтр массивов на стороне сервера не проверяет подобные структуры. Поэтому, если вдруг будет задан только один SuperItem, то он не будет интерпритироваться как массив:
 
<pre>[Supar] => stdClass Object
(
[SuperItem] => Array
(
[Id] => 2
[Name] => Two
)
[Code] => XYX
[Type] => OW
)</pre>
 
*'''@choice'''
 
Из помеченных элементов можно будет выбрать только один.
 
Пример:
 
<pre>/**
* @choice
* @var string
*/
public $HotelBookData;
 
/**
* @choice
* @var string
*/
public $TourBookData;
 
/**
* @choice
* @var string
*/
public $TransferBookData;</pre>
 
Можно будет использовать либо HotelBookData, либо TourBookData, либо TransferBookData (только один из них). В текущий версии допускается только одна группа чойсов в одном классе.
 
*'''@facet'''
 
Установка правила на значение. Пример:
 
<pre>* @facet pattern \d{2}-\d{2}:\d{2}
*
* @var string</pre>
 
Возможные типы данных, а также facets можно посмотреть здесь: [http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/ http://www.w3.org/TR/2001/REC-xmlschema-0-20010502]
 
Перевод: [http://citforum.ru/internet/xml/scheme http://citforum.ru/internet/xml/scheme]
 
*'''@id'''
 
При задании ограничений типа facet, maxLength и прочего создается вспомогательный тип, содержащий эти ограничения по маске.
 
== См. также ==
*[[Система управления порталом (ЦМС)]]<br>
*[[Контент]]

Навигация

'