Бесплатная CMS для вашего сайта Разумная альтернатива WordPress

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

25-08-2013Reading time ~ 3 min.Roadmap 3708

На решение этой задачки у меня ушло более полугода. За это время были разные решения, но в процессе отладки и тестирования, пришлось от них отказаться. Суть — сделать так, чтобы блогер мог произвольно выстроить вывод главной страницы сайта из админ-панели. Нечто похожее уже давно присутствует в 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-файлы для главной.

Related Posts
Comments (11) RSS
1 Кирилл 2013-08-26 05:27:20

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


2 Anonymous 2013-08-26 08:37:28

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


3 Артур 2015-12-01 16:41:14

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


4 Anonymous 2015-12-01 17:17:04

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


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

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


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

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

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


7 Максим 2018-08-04 10:58:33 admin

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


8 Александр 2018-08-04 12:00:33
Укажите её номер в настройках главной.

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

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

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


9 Максим 2018-08-04 14:17:19 admin

Можно и через юниты — там возможностей намного больше.


10 Сергей 2018-10-24 21:59:35
Максим.

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

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

Ну подключу я

[unit]

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

[/unit]

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


11 Максим 2018-10-25 11:15:12 admin

В какой то унит.php и пишите текст.

Leave a comment!