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

Просмотров: 736Комментарии: 11
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-файлы для главной.

Комментариев: 11 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...

10Сергей24-10-2018 23:59

Максим.

Можете показать пример как подключить текст для главной через юниты?

Тут на сайте половина картинок идет на вблогер, который недоступен и ничего не понятно, наглядности нет.

Ну подключу я

[unit]

file = какой то унит.php

[/unit]

А куда текст писать то, в какой файл или куда?

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

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

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

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

О проекте

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