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