Имя шаблона страницы изменяется в панели управления веб-сайтом в редакторе страниц, либо путём прямого редактирования соответствующего странице XML-документа. Первый вариант - стандартный, удобен при изменении шаблона оформления для одной или нескольких страниц; второй вариант подходит для массового изменения шаблонов страниц при помощи пакетной обработки файлов и автозамены. На первый взгляд это выглядит просто, но не всегда применимо на практике. Поэтому предлагаю рассмотреть альтернативный подход - динамическое изменение шаблонов оформления страниц.
Динамическое изменение шаблона реализуется программно и выполняется во время запроса страницы, что даёт возможность задать гибкие условия для назначения странице нового шаблона оформления. Принцип такого метода заключается в изменении значения глобальной переменной $template_file
, содержащей имя PHP-файла шаблона оформления текущей страницы.
Для этого следует использовать один из двух хуков GetSimple CMS:
- index-post-dataindex - вызывается после установки глобальных переменных страницы;
- index-pretemplate - вызывается перед подключением шаблона оформления страницы.
Кретерии выбора используемого хука - очерёдность и место размещения вызываемого кода: index-post-dataindex может быть использован только в плагине, index-pretemplate может использоваться и в файле functions.php темы оформления. Однако при размещении кода в файле functions.php можно обойтись и без использования хука.
Следующий фрагмент PHP-кода плагина показывает реализацию динамического изменения шаблона оформления на основании параметра template GET-запроса с использованием хука index-post-dataindex.
add_action('index-post-dataindex', 'changePageTemplate');
function changePageTemplate() {
global $template_file;
if (!empty($_GET['template'])) {
$tmp = strippath($_GET['template']) . '.php';
if ($tmp != 'functions.php' && $tmp != '.' && $tmp != '..') {
$template_file = $tmp;
}
}
}
?>
Теперь при каждом запросе страницы веб-сайта будет выполняться проверка существования GET-параметра template, содержащего имя PHP-файла шаблона оформления не включая расширение, назначаемого для запрашиваемой страницы.
В приведённом PHP-коде не выполняется проверка существования заданного файла шаблона оформления, так как эта проверка будет выполнена позже системой управления контентом. В результате проверки, если запрашиваемый файл не существует, будет использован шаблон оформления template.php. Такая логика работы веб-сайта может быть неприемлема. Поэтому для предотвращения переопределения шаблона оформления, заданного в настройках страницы, несуществующим шаблоном оформления, в приведённый код добавляется проверка существования запрашиваемого файла шаблона оформления.
add_action('index-post-dataindex', 'changePageTemplate');
function changePageTemplate() {
global $template_file, $TEMPLATE;
if (!empty($_GET['template'])) {
$tmp = strippath($_GET['template']) . '.php';
if ($tmp != 'functions.php' && $tmp != '.' && $tmp != '..') {
if (file_exists(GSTHEMESPATH . $TEMPLATE . '/' . $tmp)) {
$template_file = $tmp;
}
}
}
}
?>
Ещё один пример динамической замены шаблона оформления страницы - установка шаблона оформления для всех страниц раздела веб-сайта на основе проверки родительской страницы, выполняемая в файле functions.php темы оформления.
if (get_parent(false) == 'blog') {
$template_file = 'blogpost.php';
}
Теперь для каждой подстраницы раздела blog будет автоматически устанавливаться шаблон оформления blogpost.php.
Использовать или не использовать динамическое изменение шаблонов оформления страниц на веб-сайте - решение, зависящее от конкретных обстоятельств и целей, но теперь вы знаете как это сделать без затрат времени на редактирование страниц веб-сайта.