Современная, быстрая и удобная система управления сайтом

Юниты главной

Главная страница сайта имеет особое значение, поэтому в настройках шаблона (и 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.