Вопросы и ответы
Вебмастеру
Юниты главной
Главная страница сайта имеет особое значение, поэтому в настройках шаблона (и type-файле) реализовано довольно много опций, которыми можно управлять разными вариантами вывода. Однако, при всём их многообразии, очень часто стоит задача сформировать другой вариант вывода. Например в виде лендинга или с использованием множества произвольных блоков.
Чтобы не создавать сложный type-файл для главной, MaxSite CMS предлагает воспользоваться механизмом юнитов (units), с помощью которых главная страница формируется произвольными блоками, как кубики Лего.
Юниты используют простой описательный формат данных, который позволяет избежать сложного программирования. Задать юниты можно прямо в админ-панели в настройках шаблона главной страницы. Юниты — это обычный текст. Однако задавать опцию не самый удобный вариант для разработчика шаблона, поэтому чаще всего юниты выносят в отдельный файл шаблон/type/home/units.php
.
Строго говоря, использовать юниты можно произвольно, а не только для главной.
В файле units.php (или в опции «Юниты для главной») может быть любое количество юнитов, которые выводятся последовательно один за другим.
Каждый юнит представляет собой секционные опции в виде:
[unit] данные юнита [/unit]
Данные юнита задаются в виде «ключ = значение». Существуют предопределенные ключи для разных задач.
Ключ «html»
Ключ html используется для вывода простого html-кода или текста.
[unit] html = <h1>Заголовок</h1> [/unit]
При этом допускается использование php-шаблонизатора MaxSite CMS (в виде {{ }}
и {% %}
).
Если текст нужно разместить на несколько строк, то его следует обрамить с помощью _START_ и _END_:
[unit] html = _START_ <h1>Заголовок</h1> <span class="t-red">Текст</span> _END_ [/unit]
Данный приём разбиения значения опции можно использовать для любых секционных опций.
В файле units.php используются автоматические замены
-
[siteurl]
— заменяется на адрес сайта. -
[templateurl]
— заменяется на url-адрес шаблона.
[unit] html = <a href="[siteurl]contact">Контакты</a> [/unit]
Ключ «ushka»
С помощью этого ключа можно вывести произвольную ушку. Достаточно лишь указать имя ушки.
[unit] ushka = реклама1 [/unit]
Ключ «component»
Для вывода компонента указывается его имя (каталог):
[unit] component = footer [/unit]
Ключ «sidebar»
Для вывода произвольного сайдбара указывается его имя/номер:
[unit] sidebar = 3 [/unit]
Чтобы наполнить сайдбар виджетами, его следует определить в самом шаблоне.
Вывод опций
Для вывода опции нужно указать её ключ. При этом можно указать тип опции и дефолтное значение для случаев, если опция не сохранена.
[unit] option_key = my_option option_type = my_type option_default = Значение по умолчанию [/unit]
Обычно для шаблона все опции уникальны. Достигается это за счет option_type, который равен текущему шаблону (его каталогу). Поэтому можно не указывать option_type, он будет автоматически присвоен шаблону (или указать как %TEMPLATE%
). Если значение по умолчанию — пустая строка, то option_default, также можно не указывать.
В юните происходит только вывод опции.
Файл юнита (ключ «file»)
Юнит может выводиться внешним файлом. В этом файле будут доступны все данные юнита. Файлы юнитов главной размещаются в type/home/units/
(если там файла нет, то он ищется от каталога шаблона). Наиболее используемый файл last-pages.php, который позволяет выводить записи с большим количеством параметров.
В общем виде файл указывается с помощью ключа file:
[unit] file = my_unit.php [/unit]
В данном примере будет подключен файл type/home/units/my_unit.php
, где в произвольном виде можно разместить код для вывода.
Если файл юнита не будет найден в каталоге type/home/units/
, то MaxSite CMS попробует его найти относительно каталога шаблона. Например можно вынести файлы юнитов в каталог шаблона blocks
:
[unit] file = blocks/my_unit.php [/unit]
Файл юнита «last-pages.php»
файл last-pages.php очень мощный файл и часто используется вебмастерами. В нём достаточно много опций, с помощью которых можно задать критерии получения записей, например номер рубрики, а также сформировать сам html-вывод. Для этого используется шаблонизатор Page_out, а также его «надстройка» Block_pages. Это достаточно сложные php-классы, поэтому всё управление и осуществляется с помощью опций last-pages.php.
Опций достаточно много, поэтому просто откройте last-pages.php для их просмотра. Опции указываются прямо в данных юнита, например:
[unit] file = last-pages.php limit = 3 cat_id = 1, 5, 7 line1 = [title] line2 = [cat][date] line3 = line4 = line5 = [/unit]
Последнюю версию last-pages.php вы найдёте в default-шаблоне.
Ключ «require»
Ключ require также подключает внешний файл юнита, но всегда указывается относительно каталога шаблона. Кроме этого в таком файле поддерживается php-шаблонизатор (ключ tmpl) и функция парсера текста (ключ parser).
[unit] require = block/home1.php tmpl = 1 parser = autotag_simple [/unit]
В данном примере будет выведен файл block/home1.php который предварительно обработается через php-шаблонизатор и парсер Simple. С помощью require удобно выводить текстовые блоки с html-кодом или для Simple-парсера.
Условие вывода юнита
У юнита можно задать условие вывода с помощью ключа rules или _rules (с подчеркиванием). Условие задается в виде php-строки (без ошибок), которая должна возвращать булево значение. Если условие истинно, то юнит будет выполняться, иначе его обработка и вывод будет проигнорирован.
[unit] rules = (mso_current_paged() == 1) html = <a href="[siteurl]">Главная</a> [/unit]
Данный ввод будет выведен только на первой странице пагинации.
Специальная конструкция @fromfile
С помощью специальной конструкции @fromfile можно подключить произвольный файл в виде текста. Вместо этой конструкции будет добавлен текст указанного файла (путь указывается относительно каталога шаблона). Таким образом можно выносить в отдельные файлы произвольные участки текста.
Например можно вынести весь юнит отдельно:
@fromfile block/home-unit-1.php
Не имеет значения где в units.php указывается @fromfile : вначале произойдёт «склейка» файлов, и только после этого результат будет обработан как секционные опции. Данная возможность позволяет вынести в отдельный файл какую-то сложную часть юнита, чтобы не загромождать код units.php.
[unit] cat_id = 7..12 limit = 4 @fromfile block/home-unit-2.php [/unit]
Собственные переменные юнита
В юните можно создавать и использовать собственные переменные. Для задания такой переменной её ключ должен начинаться с var@. А использование (то есть получение значений) с тем же ключом, заключенным в квадратные скобки.
[unit] file = last-pages.php cat_id = 5..14 limit = 6 var@title = Книги var@class = bg-green block_start= <div class="[var@class]">[var@title] block_end = </div> [/unit]
В данном примере были заданы и использованы переменные var@title и var@class. После обработки этот код будет эквивалентен этому:
[unit] file = last-pages.php cat_id = 5..14 limit = 6 block_start= <div class="bg-green">Книги block_end = </div> [/unit]
Возможность задания переменных обычно используется совместно с @fromfile, чтобы упростить настройку юнита и не загромождать код.
[unit] file = last-pages.php cat_id = 5..14 limit = 6 var@title = Книги var@class = bg-green @fromfile block/home-unit-3.php [/unit]
То есть var-переменные будут использованы в block/home-unit-3.php.
Специальная конструкция @USE_PHP@
В файле units.php обычно размещаются только секционные опции: всё что вне блоков юнитов будет проигнорировано. Но в некоторых случаях необходимо разместить какой-то php-код. Для этого в произвольном месте файла (обычно вверху) нужно разместить специальную конструкцию @USE_PHP@. При её наличии, MaxSite CMS вначале обработает units.php как обычный php-файл (можно использовать php-шаблонизатор), а уже после произведёт парсинг секционных опций.
Модули для юнитов
Поскольку юниты достаточно разнообразны, то возникают некоторые сложности с ситуацией, когда используются разные типы юнитов. Например один юнит подключается как file, другой как @fromfile, а третий как require. Модули — это новый способ, который использует единообразный код подключения, скрывая конкретную реализацию юнита.
Модули в units.php
(или в опции «Юниты для главной») производится с помощью команды @module:
@module promo/promo-mf @module pages/favorites2 @module accordions/accordion1 @module calls/call1 @module cols/col-3colums1 @module forms/form4
Для модулей предусмотрен каталог шаблон/modules
. Каждый модуль располагается в своём каталоге с обязательным файлом index.php
. Таким образом этот файл и содержит текст юнита, например:
[unit] module = promo/promo-mf require = content.php parser = autotag_simple [/unit]
В данном примере юнит использует команду require, которой подключает файл content.php
(где размещается html-код блока). Чтобы система нашла этот каталог, используется параметр module
. Можно обойтись и без него, но тогда следует указывать полный путь к файлу content.php
.
[unit] require = promo/promo-mf/content.php parser = autotag_simple [/unit]
Если ваш шаблон использует множество юнитов, то используйте модули, для того, чтобы упростить их подключение в units.php.