dimayakovlev.ru


Динамическое изменение шаблонов оформления страниц в GetSimple CMS

Имя шаблона страницы изменяется в панели управления веб-сайтом в редакторе страниц, либо путём прямого редактирования соответствующего странице 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.

Использовать или не использовать динамическое изменение шаблонов оформления страниц на веб-сайте - решение, зависящее от конкретных обстоятельств и целей, но теперь вы знаете как это сделать без затрат времени на редактирование страниц веб-сайта.