На решение этой задачки у меня ушло более полугода. За это время были разные решения, но в процессе отладки и тестирования, пришлось от них отказаться. Суть — сделать так, чтобы блогер мог произвольно выстроить вывод главной страницы сайта из админ-панели. Нечто похожее уже давно присутствует в MaxSite CMS — компоненты шапки и подвала, но в случае главной задача усложняется тем, что опций каждого блока вывода может содержать очень много разных настроек.
Впрочем, всё это «лирика». Покажу на примерах, каким образом в начиная с MaxSite CMS 0.853 мы можем произвольно настраивать главную страницу.
В Настройках шаблона — Главная появилась опция «Свой вариант вывода главной».
Эта настройка — секционные опции, где в качестве каждого блока используется т.н. 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 05:27
Максим, благодарю за подробную инструкцию. Но подскажи пожалуйста - на чем лучше строить шаблоны? На default или D2? Просто я смотрю Дефолт шаблон уже обскакал D2 по своей простоте создания шаблонов на его основе.
2Аноним26-08-2013 08:37
Сейчас между ними нет принципиальной разницы. Отличия разве что в css, но они итак будут разными у разных шаблонов. Компонентов больше в default. В остальном у них нет отличий.
3Артур01-12-2015 16:41
Здравствуйте! Спасибо, ваша статья очень помогла. Я вывел на главной, под основным текстом, четыре блочка с последними записями и миниатюрами НО, мне не нужна на главной пагинация. Не могли бы подсказать, как ее для главной отключить..? Использую шаблон default 0.93
4Аноним01-12-2015 17:17
Если это юнит last-pages.php, то там есть параметр pagination.
5Артур02-12-2015 10:33
Спрасибо! Разобрался, получилось
6Александр04-08-2018 09:36
Это не совсем то, что я искал.
Как можно установить запись в качестве главной (как в вопрдпрессе), а не создавать новые файлы?
7Максим04-08-2018 10:58
Укажите её номер в настройках главной.
8Александр04-08-2018 12:00
Спасибо, но это я делал(( Тогда эта запись выводится, но все равно в качестве анонса(( А я хотел не этого, а чтобы она была на всю страницу.
В любом случае не страшно! Я нашел решение – вывести нужный мне текст через юнит, подключив файл, либо через поле "Текст для главной перед всеми записями"
Крутая cms! Лишь бы знать еще php...
9Максим04-08-2018 14:17
Можно и через юниты — там возможностей намного больше.
10Сергей24-10-2018 21:59
Максим.
Можете показать пример как подключить текст для главной через юниты?
Тут на сайте половина картинок идет на вблогер, который недоступен и ничего не понятно, наглядности нет.
Ну подключу я
[unit]file = какой то унит.php
[/unit]А куда текст писать то, в какой файл или куда?
11Максим25-10-2018 11:15
В какой то унит.php и пишите текст.