В G-Drive по умолчанию используются шаблоны на чистом PHP. Их обычное понимание дополняет концепция предварительно обрабатываемых вложенных шаблонов, при которой шаблоны некоторых блоков страницы могут выбираться динамически в зависимости от запрошенной страницы и обрабатываться вне контекста общего шаблона страницы. Естественно, шаблонами здесь названы не темы оформления, а их отдельные файлы, содержащие HTML- и PHP-код.
За основу создаваемого шаблона возьмем тему оформления Hyde Марка Отто. Тема содержит четыре вложенных шаблона (index.html, 404.html, которые можно назвать страницами, и _layouts/page.html, _layouts/post.html), один общий шаблон (_layouts/default.html) и два подключаемых шаблона из общего (_includes/head.html, _includes/sidebar.html). Также в теме есть файл atom.xml, который тоже можно считать общим шаблоном. Оформим его в виде вложенного шаблона и укажем в нем общий шаблон с именем mods/content.php, который содержит только команду вывода результата обработки вложенного шаблона.
В других вложенных шаблонах не нужно указывать имя общего шаблона, как это сделано в оригинальной теме. По умолчанию в каркасе используется общий шаблон с именем mods/index.php. Будем использовать это имя, а для шаблона главной страницы во избежание конфликта имен возьмем основное имя posts, т.е. шаблон будет называться mods/posts.php.
Кроме имени другим важным отличием шаблона главной страницы от оригинала является использование функции excerpt вместо вывода полных текстов постов. Чтобы данная функция работала нормально, нужно в текстах постов проставить маркер <!-- m -->
, разделяющий выводимые в списке начальные фрагменты постов и их продолжение, причем этот маркер не должен нарушать DOM, т.е. в начальных фрагментах не должно быть незакрытых парных тегов и т.п.
Вложенный шаблон страницы ошибки 404 тоже имеет отличное от оригинала имя, а именно mods/error.php, которое используется в каркасе по умолчанию.
Для двух других вложенных шаблонов возьмем оригинальные основные имена page и post, т.е. они будут называться mods/page.php и mods/post.php.
Аналогом конфигурационного файла _config.yml является mods/config.php. Этот файл можно разместить и в каком-нибудь подкаталоге каталога mods, например в mods/includes. Состав конфигурационных параметров соответствует оригиналу с некоторыми дополнениями (menu, relatedpostslimit, recentpostslimit и date) за исключением author.url, замененного на author.email (видимо, в оригинальной теме допущено какое-то несоответствие, т.к. в файле atom.xml используются тег email и параметр author.email). Для подключения конфигурационного файла и определения глобальной переменной $site добавьте в код каркаса следующую команду:
$site = require PATH.'config.php';
Статичные файлы шаблона размещены в каталоге docs/public (docs – корневой каталог сайта, который при необходимости можно переименовать). Образцовые тексты постов и т.п. размещены в файле site_categories.sql. Об импортировании этого файла и настройке корневого каталога можно прочитать в начале статьи «Установка G-Drive». Поле category добавлено в основную таблицу для пометки публичных постов. Для скрытых постов и других объектов сохраняйте в данном поле нулевое значение. Подробнее об этом можно прочитать в конце статьи «Блог на G-Drive» и в первом комментарии к ней.
Скачать: hyde-2.1pro.zip (суффикс «pro» означает присутствие каталога docs).
Скачать дополнение: hyde.zip (контроллеры и вспомогательные функции).
Демо: http://hyde.pageshop.ru/
Следующий фрагмент кода – это калька с оригинального шаблона:
G-Drive позволяет использовать более подходящие условия для определения главной страницы, например
$px == ''
.Более универсальное условие для определения ссылки на активную страницу при выводе меню:
$px == $pathx
. Это условие позволяет использовать в $site['menu'] канонические пути, например (смотрите третий пункт меню):Обновил шаблон с учетом замечаний в двух предыдущих комментариях (изменения коснулись только файлов из каталога mods/includes).
Также обновил дополнение (обновлены контроллеры, добавлена модель).
Обновил шаблон и дополнение. Для atom.xml вместо заголовочного файла теперь используется обычный вложенный шаблон со специальным общим шаблоном. Об этом внесена поправка в статью.
Обновил шаблон и дополнение. Переменная $layout заменена на
extra('layout')
. Функции модели в параметре $order теперь получают не строку, а массив. Также изменено значение по умолчанию для этого параметра: по умолчанию сортировка будет выполняться по первичному ключу, т.е. по полю post, а не по полю id.Обновил шаблон и дополнение. Функциональность pagelink расширена до универсальной. В значение конфигурационного параметра url добавлен конечный слэш. Теперь это значение используется в качестве базового URL для адресов в atom.xml (ранее использовался слэш-разделитель между значением этого параметра и pathx). Добавлен конфигурационный параметр defcat со значением post (в трех шаблонах со ссылками на страницы постов идентификатор коллекции постов изменен на post).