Произвольный вывод главной страницы сайта

Просмотров: 537Комментарии: 9
MaxSite CMSОбщие вопросы

На решение этой задачки у меня ушло более полугода. За это время были разные решения, но в процессе отладки и тестирования, пришлось от них отказаться. Суть — сделать так, чтобы блогер мог произвольно выстроить вывод главной страницы сайта из админ-панели. Нечто похожее уже давно присутствует в MaxSite CMS — компоненты шапки и подвала, но в случае главной задача усложняется тем, что опций каждого блока вывода может содержать очень много разных настроек.

Впрочем, всё это «лирика». Покажу на примерах, каким образом в начиная с MaxSite CMS 0.853 мы можем произвольно настраивать главную страницу.

В Настройках шаблона — Главная появилась опция «Свой вариант вывода главной».

Настройка главной

Напомню, что речь идет о шаблоне Default.

Эта настройка — секционные опции, где в качестве каждого блока используется т.н. unit. Каждый unit должен иметь обязательный параметр file, в котором указывается имя подключаемого php-файла.

Сами php-файлы располагаются в type/home/units текущего шаблона или shared-каталога.

Например в shared-каталоге есть файл home-last-page.php, который выводит последнюю запись сайта. В «Свой вариант вывода главной» указываем:

[unit]
file = home-last-page.php
[/unit]

С таким же успехом мы можем использовать любой другой готовый unit-файл для типа home. Более того, unit-файлы можно использовать многократно. Например:

[unit]
file = home-last-page.php
[/unit]
 
[unit]
file = home-last-page.php
[/unit]

— выведет два блока с последними записями сайта.

В шаблоне Default я включил два unit-файла:

  • 2col-cats.php — две рубрики в две колонки
  • mini-title.php — миниатюры записей

Пример настройки главной:

[unit]
file = home-last-page.php
[/unit]
 
[unit]
file = 2col-cats.php
cats = 1,3
limit = 5
[/unit]
 
[unit]
file = mini-title.php
[/unit]

Для 2col-cats.php указываются дополнительные параметры — номера рубрик и количество записей в каждой колонке. Файл mini-title.php настроек не имеет (на момент написания статьи).

Результат:

Главная

При использовании unit-файлов из shared-каталога, следует учитывать, что в них используются различные опции. Например для home-cat-block-XXX.php следует отметить опции «Блоки рубрик на главной» и указать номера рубрик. То есть каждый unit-файл имеет какие-то свои особенности.

После отладки и настройки главной, есть смысл в опции «Время кеширования главной страницы» задать время кеширования. Поскольку каждый блок может генерировать кучу запросов к базе данных, то с помощью кеша, мы полностью снимаем эту проблему. Поддержка же этой опции полностью ложится на unit-файл.

Технические подробности

Каждый unit-файл располагается в type/home/units. В этом файле будет доступна переменная $UNIT, которая представляет собой массив с ключами из секционной опции. В нашем примере для 2col-cats.php будет массив:

array(
	file => 2col-cats.php
	cats => 1,3
	limit => 5
)

Что с этим делать решается уже на уровне unit-файла.

Вывод данных в unit-файле может быть произвольным. В shared-файлах используется «типовой» вариант, а в Default я использую новый php-класс Block_pages. В варианте с Block_pages несколько проще организовать вывод данных (меньше программирования).

В заключении хотелось бы отметить, что с реализацией «произвольной главной», MaxSite CMS достигла состояния, когда можно менять практически любую часть шаблона: компоненты, custom-файлы, main-шаблоны, type-файлы, type_foreach-файлы, css-стили/профили и, наконец-то, unit-файлы для главной.

Комментариев: 9 RSS

1Кирилл26-08-2013 07:27

Максим, благодарю за подробную инструкцию. Но подскажи пожалуйста - на чем лучше строить шаблоны? На default или D2? Просто я смотрю Дефолт шаблон уже обскакал D2 по своей простоте создания шаблонов на его основе.

2Аноним26-08-2013 10:37

Сейчас между ними нет принципиальной разницы. Отличия разве что в css, но они итак будут разными у разных шаблонов. Компонентов больше в default. В остальном у них нет отличий.

3Артур01-12-2015 18:41

Здравствуйте! Спасибо, ваша статья очень помогла. Я вывел на главной, под основным текстом, четыре блочка с последними записями и миниатюрами НО, мне не нужна на главной пагинация. Не могли бы подсказать, как ее для главной отключить..? Использую шаблон default 0.93

4Аноним01-12-2015 19:17

Если это юнит last-pages.php, то там есть параметр pagination.

5Артур02-12-2015 12:33

Спрасибо! Разобрался, получилось

6Александр04-08-2018 11:36

Это не совсем то, что я искал.

Как можно установить запись в качестве главной (как в вопрдпрессе), а не создавать новые файлы?

8Александр04-08-2018 14:00

Укажите её номер в настройках главной.

Спасибо, но это я делал(( Тогда эта запись выводится, но все равно в качестве анонса(( А я хотел не этого, а чтобы она была на всю страницу.

В любом случае не страшно! Я нашел решение – вывести нужный мне текст через юнит, подключив файл, либо через поле "Текст для главной перед всеми записями"

Крутая cms! Лишь бы знать еще php...

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)

О проекте

MaxSite CMS предназначена для создания сайтов любой сложности. Система отлично подходит обычным пользователям, вебмастерам, фрилансерам и вебстудиям.