Открыть главное меню

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

Шаблон – это текст в формате 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 и прочего создается вспомогательный тип, содержащий эти ограничения по маске.

См. также

'