Современная, быстрая и удобная система управления сайтом

Работа шаблона

Архив записейКомментарии: 0Просмотров: 6642

Работа MaxSite CMS основана на входящем URL. Вначале загружается ядро CodeIgniter, в котором призводится подключение основных библиотек, вроде базы данных, а также происходит разделение входящего адреса на сегменты. Например сайт/page/about будет состоять из сегментов page и about. В дальнейшем CodeIgniter передаёт управление контролёру maxsite, который, в свою очередь, загружает файлы MaxSite CMS.

В MaxSite CMS есть предопределенные типы данных, которые определяются как первый сегмент URL. Например page — это тип записи, а category — рубрика. В первом случае подключаются файлы для вывода одиночной записи, во втором — уже список записей. Если же первый сегмент неизвестен MaxSite CMS, то ему присваивается тип page_404.

Следует обратить внимание, что тип данных и первый сегмент не всегда одно и тоже. Для проверки типа данных используется функция is_type('тип').

if (is_type('page')) echo 'Это запись';
if (is_type('category')) echo 'Это рубрика';
if (is_type('page_404')) echo 'Это неизвестный тип данных';

По адресу page/about мы увидим сообщение «Это запись». По адресу category/blog мы увидим «Это рубрика», а по адресу about — «Это неизвестный тип данных», поскольку такой тип неизвестен MaxSite CMS.

Диспетчер типов MaxSite CMS учитывает такие ситуации и в случае page_404 проверяет существование каталога/файла для первого сегмента, в нашем случае about. Если он есть, то файл будет подключен.

Такая схема позволяет создавать произвольные страницы на уровне шаблона. Например требуется вывести карту сайта по адресу map. Достаточно создать одноименный каталог/файл и диспетчер его подключит.

Точка входа в любой шаблон — всегда index.php. В нём подключаются функции для работы с записями и рубриками (они почти всегда используются), а дальше всю работу выполняет диспетчер MaxSite CMS.

require_once(getinfo('common_dir') . 'page.php'); // функции страниц 
require_once(getinfo('common_dir') . 'category.php'); // функции рубрик
 
# подключаем нужный type-файл
if ($fn = mso_dispatcher()) require($fn);

Диспетчер находит нужный type-файл для подключения. Любой type-файл должен находится в каталоге type. Но если мы посмотрим на default-шаблон, то увидим только подкаталог home, что явно недостаточно для понимания работы шаблона.

Секрет в том, что диспетчер сначала проверяет type-файл в каталоге текущего шаблона, а если его нет, то использует уже shared-каталог.

Я обращаю внимание что имя файла должно совпадать с именем каталога. Например type/home/home.php — именно это и будет type-файлом. Или type/page/page.php. Если нужно создать map, то нужно будет в каталоге шаблона сделать так: type/map/map.php, тогда по адресу сайт/map будет подключен именно этот файл.

После того, как определен type-файл происходит его подключение. В type-файле может быть разный код под разные задачи, поэтому я расскажу про «типовое поведение», но перед этим нужно сделать небольшое отступление.

Основная задача type-файла — это получение данных из базы и организация цикла вывода. На выходе type-файла — html-код, который мы называем контентом. Однако на странице должны присутствовать и другие части HTML — секция head, начальная html-разметка, сайдбар, какике-то опции, ушки и конечная часть html-разметки.

Условно любой шаблон можно разделить на две части, которые подключаются до вывода контента (type-файла) и после:

  • start
  • контент
  • end

Такой алгоритм реализован через main-файлы, но мы можем его рассматривать как «черный ящик», где main-файл шаблона — представляет собой html-модульную сетку сайта. В main-файле выполняется базовая html-разметка шаблона.

Таким образом, если сильно утрировать, в type-файле получаются данные для вывода, организуется цикл вывода, а результат оказывается в глобальной переменной $CONTENT_OUT, который после выводится в main-файле.

Данная схема работы позволяет разделить работу type-файла от его разметки. Иначе пришлось бы создавать объёмный и сложный php-код с жуткой смесью html-вставок. Здесь же нам достаточно сосредоточиться только на верстке main-шаблона.

Все main-файлы располагаются в одноименном каталоге шаблона. Файл main/main.php используется по умолчанию. В подкаталогах, например main/left-sidebar размещаются другие варианты верстки и они доступны к выбору через админ-панель в Настройках шаблона.

Таким образом, если стоит задача настроить модульную сетку, то следует использовать main-шаблон.

Для того, чтобы влиять на type-файл, используются type_foreach-файлы в одноименном каталоге шаблона. Это как правило небольшие файлы, через которые можно менять формат вывода или какие-то параметры. Например в файле info-top.php можно поменять формат вывода верхней части записи. При этом другие варианты располагаются в type_foreach/info-top и доступны для выбора в админ-панели.

То есть, если стоит задача поменять какую-то часть вывода, то не нужно редактировать type-файл, достаточно найти нужный type_foreach-файл.

Каталог шаблона components содержит компоненты шапки и подвала, которые доступны для выбора в админ-панели. Компоненты как правило содержат и php-код и html-разметку. Многие шаблоны рассчитаны на определенные компоненты, которые и следует использовать (обычно это в инструкции к шаблону уточняется). Компоненты позволяют отказаться от редактирования main-шаблона. Если вам нужна другая шапка или подвал, то проще всего сделать новый компонент и выбрать его в админ-панели. Компоненты мы будем рассматривать позже.

Каталог custom содержит специфичные для шаблона файлы. Например набор функций, опций и т.п. Некоторые файлы (template.php и template-admin.php) типовые и их скорее всего менять не придется. А вот my-template.php, наоборот, содержит только собственные функции и код.

Последний каталог, который стоит рассмотреть — assets. Он содержит «оформительскую» часть шаблона: css, js, изображения, шрифты и т.п.

В MaxSite CMS не нужно специально прописывать подключение css/js-файлов. CSS-файл достаточно разместить в css-каталоге. JS-файлы можно разместить в js/autoload, тогда он подключится в секции HEAD, или в js/lazy, тогда он подключится в конце страницы перед закрывающим /BODY.

Если файл начинается с «-» или «_», то его подключение игнорируется. Порядок подключения — алфавитый. Если он важен, то следует использовать цифровые префиксы «1-», «2-» и т.п.

В default-шаблоне используется старая Less-версия UniCSS. Новая использует Sass.

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

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

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

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