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

Алгоритм выполнения шаблона

15-04-2013Время чтения ~ 3 мин.Roadmap 11023

Работа 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.

Ещё раз кратко об алгоритме работы шаблона

  1. Включается index.php шаблона.
  2. Диспетчер определяет и подключает нужный type-файл.
  3. В начале type-файла получаются данные для вывода.
  4. Подключается main-start.php, где включается буферизация данных.
  5. Type-файл отрабатывает полностью и подключается main-end.php
  6. В main-end.php буфер вывода сохраняется и определяется main-шаблон.
  7. В main.php происходит непосредственный вывод данных в браузер.
⚠ Error! SQLSTATE: HY000 (\Pdo\PdoQuery\fetchAll) no such table: file_info
Error in /home/maxsite/domains/max-3000.com/public_html/templates/default/parts/content/400-other-pages.php
Type: TypeError
Message: count(): Argument #1 ($value) must be of type Countable|array, false given
File: /home/maxsite/domains/max-3000.com/public_html/templates/default/parts/content/400-other-pages.php
Line: 59