Шаблоны страниц: различия между версиями

Материал из Центр поддержки системы бронировании
Перейти к навигации Перейти к поиску
 
 
(не показано 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 и прочего создается вспомогательный тип, содержащий эти ограничения по маске.

См. также