# Построение шаблонной системы

Шаблонная система - это лицо любого WEB проекта, потому что именно она очень часто определяет те возможности, которые получает дизайнер для реализации своего видения сайта.

Шаблонизатор NGCMS реализован по принципу - пусть система будет менее гибкой, но зато ей сможет овладеть любой желающий. Для создания собственного шаблона вам достаточно знать HTML, обладать хотябы начальными навыками вёрстки и быть готовым читать документацию.

## Местонахождение шаблонов и структура каталогов

CMS поддерживает неограниченное количество пользовательских шаблонов, при этом благодаря плагину switcher на сайте можно использовать одновременно несколько разных шаблонов (в зависимости от выбранного профиля или просто доменного имени).
Все пользовательские шаблоны хранятся в каталоге templates/templateID, где templateID - идентификатор шаблона (и одновременно его название).
Рассмотрим структуру каталогов на примере шаблона по умолчанию:
templates/default/ - каталог, в котором хранятся все файлы шаблона.
templates/default/plugins/ - каталог, в котором хранятся персональные шаблоны плагинов.
templates/default/plugins/calendar/ - каталог персонального шаблона для плагина calendar
templates/default/static/ - каталог, в котором хранятся шаблоны для <a href="static.tpl.md">статических страниц</a>.
templates/default/ncustom/newsTemplateID/ - каталог для специальных новостных шаблонов.
О последнем пункте (специальные новостные шаблоны) стоит рассказать в отдельности:
NGCMS позволяет для каждой категории использовать свой собственный набор шаблонов, что позволяет реализовать очень гибкие схемы отображения. В настройках каждой категории вы можете выбрать "Шаблон для новостей категории" (в нём указывается ваш newsTemplateID) и при отображении короткой/полной новости из этой категории будут использоваться файлы news.short.tpl, news.full.tpl, news.print.tpl именно из выбранного вами шаблона.
Также создателям шаблонов следует учитывать следующее:
Практически все плагины поддерживают возможность при отображении использовать не только свой собственный (идущий в поставке в плагином) шаблон, но и тот шаблон, который вы создадите для них в подкаталоге plugins/.
Крайне рекомендуется при создании шаблона сайта учитывать эту особенность и создавать также шаблоны для наиболее используемых плагинов.

## Основной блок - main.tpl

![](templates/template_structure_small.gif)

Шаблон main.tpl - самый важный блок оформления, в него встраиваются все остальные шаблоны и элементы управления.
Вы знакомы с SSI (<a href="http://ru.wikipedia.org/wiki/SSI_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29" target="_blank">Server Side Include</a>)? Если да, то это знакомство вам пригодится для понимания шаблонной системы. Если же нет, то не беда - возможно, вам придётся потратить лишних пару минут и всё.
Представьте, что main.tpl - это ваша HTML страничка. А внутрь этой страницы вы можете вставлять как некоторый набор из предопределённых переменных, так и переменные, создаваемые плагинами.

## Типы информационных элементов в шаблонах

В NGCMS возможны 3 типа информационных элементов:
{{ variable }} - Обычная переменная с наименованием variable.
[block]...[/block] - Условный блок, содержимое которого отображается или не отображается в зависимости от различных условий.
{{ l_variable }} - Языковая переменная variable, информация на её месте отображается на текущем языке системы.

## Переменные, доступные во всех шаблонах

Существует набор переменных, которые доступны во всех шаблонах (за их генерацию отвечает движок шаблонизатора).
Эти переменные часто можно встретить в шаблонных .tpl файлах, вот полный список таких переменных:
{{ skins_url }} - URL к скину админ панели (в этом скине находятся многие элементы дизайна, включая иконки BB тегов и смайлы).
{{ tpl_url }} - URL к скину текущего шаблона.
{{ admin_url }} - URL в каталогу engine/ - в нём, к примеру, находится файл captcha.php, отвечающий за генерацию защитного кода безопасности.
