Работа MaxSite CMS основана на анализе входящего URL. Согласно URL определяется тип данных, который по сути представляет собой первый сегмент адреса (сегменты разделены «/»). Таким образом в адресе сайт/page/hello первый сегмент — page. В адресе сайт/book — book.
В MaxSite CMS предопределены некоторые сегменты, которые являются типами данных. Например page используется для вывода одиночной записи, а category — для списка записей указанной рубрики. Для тех сегментов, о которых MaxSite CMS не знает автоматически ставится тип данных page_404 и дальнейшая его обработка целиком ложится на плечи вебмастера.
Type-файлы
За обработку типов данных отвечают type-файлы. Физически type-файлы располагаются в shared-каталоге type. Каждый тип данных находится в своём отдельном каталоге.
Type-файлы как правило редко меняются в шаблоне, и если стоит такая необходимость, то достаточно разместить type-каталог в шаблоне, повторяя структуру и имя файла из shared. Диспетчер типов данных автоматически подключит файл из шаблона.
Диспетчер типов данных
Диспетчеризация выполняется в index.php шаблона функцией mso_dispatcher(). Диспетчер автоматически проверяет наличие type-файлов в каталоге шаблона, а также анализирует входящий URL, в случае типа page_404.
Если MaxSite CMS установила тип данных page_404, диспетчер проверяет наличие type-файла совпадающего по имени с первым сегментом. Например для адреса сайт/book MaxSite CMS установила тип page_404, поскольку такой тип неизвестен системе. Диспетчер проверит существование файла type/book/book.php в шаблоне и если такой файл есть, то передаст ему управление.
Данный пример показывает, что в MaxSite CMS возможны произвольные URL и произвольные типы данных, базирующихся на входящем URL.
Работа type-файла
В начале работы type-файла происходит получение данных, согласно текущему типу. Например для page — выполняется выборка записи из базы данных. Перед началом вывода в браузер, включается буферизация (shared/main/main-start.php или в текущем шаблоне).
В конце type-файла подключается файл main-end.php (shared/main/main-end.php или в текущем шаблоне), где происходит получение буфера вывода и сохранение её в глобальную переменную $CONTENT_OUT.
В main-end.php также происходит определение необходимого main-файла, в котором, собственно, и происходит непосредственный вывод в браузер в требуемом HTML-коде.
Main-шаблон
С практической точки зрения удобно иметь единый файл с html-структурой шаблона. Эту задачу решает main-шаблон в виде main.php. В этом файле происходит вывод в браузер.
По своей сути main-шаблон является модульной сеткой сайта, где предопределены все теги-контейнеры, а также необходимый программный код. В подавляющем большинстве случаев вебмастеру нет необходимости менять структуру этого файла.
Вместе с тем, MaxSite CMS поддерживает множество main-шаблонов, которые могут произвольно использоваться для разных типов данных или разных записей. Это означает, что шаблон может поддерживать одновременно несколько модульных сеток, которые переключаются/выбираются в админ-панели.
Main-файлы находятся в каталоге шаблона main. Например для модульной сетки без сайдбаров используется шаблон no-sidebar в main/no-sidebar/main.php.
Ещё раз кратко об алгоритме работы шаблона
- Включается index.php шаблона.
- Диспетчер определяет и подключает нужный type-файл.
- В начале type-файла получаются данные для вывода.
- Подключается main-start.php, где включается буферизация данных.
- Type-файл отрабатывает полностью и подключается main-end.php
- В main-end.php буфер вывода сохраняется и определяется main-шаблон.
- В main.php происходит непосредственный вывод данных в браузер.