Пользовательский шаблон "шапки" сайта Header.TPL

Плагин "pagemycatheader" CMF Cotonti позволяет гибко подменять стандартный шаблон header.tpl на страницах выбранной родительской категории и всех её дочерних категорий, включая отдельные статьи.

Page My Custom Categories and Articles Header Template (pagemycatheader)

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d322e332e302d626c756568747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e342b2d677265656e68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f746f6e74695f5369656e612d302e392e32362b2d6f72616e6765

Плагин для Cotonti Siena — позволяет гибко подменять шаблон заголовка header.$location.tpl на страницах выбранной родительской категории Page и всех её дочерних категорий, включая отдельные статьи. Поддерживает автоматическую обработку ЧПУ и URL-параметров (?c=, ?id=), не требует изменений ядра, интегрируется с любой темой.

 

Пример реализации


Описание и назначение

pagemycatheader — это расширение для Cotonti Siena, которое позволяет:

  • Использовать разные шаблоны заголовков (header.tpl) для различных разделов сайта;
  • Автоматически подставлять заголовок по выбранной родительской категории и её дочерним;
  • Сохранять чистоту структуры — не нужно плодить шаблоны для каждой подкатегории.

Плагин подойдет для сайтов-документаций, блогов, порталов, где важна уникальность заголовка для раздела или группы материалов.


Основные возможности

  • Автоматическая подмена header: для страниц, категорий и статей, входящих в дерево выбранной родительской категории;
  • ЧПУ поддержка: корректное определение категории из структуры URL;
  • Обратная совместимость: работает для старых ссылок вида ?c=категория или ?id=страница;
  • Гибкая настройка: меняете только один параметр — код родительской категории (parentcat);
  • Работает без вмешательства в ядро Cotonti;
  • Совместимость: PHP 8.4+, Cotonti Siena ≥0.9.26.

примеры шаблонов

/themes/2waydeal/header.list.tpl

  • шаблон по умолчанию для списков страниц (статей) и/в любой категории, если $cfg['enablecustomhf'] = true;

/themes/2waydeal/header.pages.tpl

  • шаблон по умолчанию для любой страницы(статьи) в любой категории, если $cfg['enablecustomhf'] = true;

/themes/2waydeal/header.tpl

  • шаблон по умолчанию, обязательный, НЕ ЗАВИСИТ от $cfg['enablecustomhf'] = true;

/themes/2waydeal/header.page.user-guide.tpl

  • шаблон, который выводим при помощи плагина "pagemycatheader", если $cfg['enablecustomhf'] = true;


Установка

  • Копирование файлов
    Поместите папку плагина pagemycatheader в plugins/ вашего сайта:

    plugins/pagemycatheader/
    ├─ pagemycatheader.setup.php
    ├─ pagemycatheader.functions.php
    └─ pagemycatheader.header.first.php
    

     

  • Активация
    • Перейдите в админ-панель Cotonti: меню “Плагины”.
    • Включите плагин pagemycatheader.
  • Настройка параметра parentcat
    В настройках укажите код родительской категории, например: user-guide.
    Это значение должно точно соответствовать коду в структуре.
  • Создание шаблона
    Сгенерируйте файл:

    themes/ваша_тема/header.page.user-guide.tpl
    

     

    1. Название должно быть строго: header.page. + код категории + .tpl
    2. Очистка кэша
      • После установки или изменений шаблонов очистите кэш Cotonti:
        Админка → Инструменты → Очистить кэш (Clear Cache).

Принцип работы: логика и детали

  • Хук header.first
    Плагин работает на момент первого вызова заголовка (header.first). Это даёт максимальную гибкость в обработке параметров страницы до загрузки темы.
  • Определение текущей категории
    • ЧПУ:
      Извлекается сегмент URL (сразу после языка — /ru/user-guide/... даёт user-guide).
    • Старые ссылки:
      Если передан параметр ?c — берётся код категории; если ?id — определяется категория страницы по БД.
  • Проверка принадлежности Используется функция:

    pagemycatheader_is_descendant($cat, $parentcat)

     

  • Она проверяет:
    • Совпадает ли текущая категория с родительской;
    • Является ли дочерней (на любом уровне вложенности).
  • Подмена шаблона
    Для совпадающей категории формируется переменная Cotonti:

    Cot::$env['location'] = 'page.' . $parentcat;
    

     

Далее Cotonti подгружает файл шаблона:

header.page.user-guide.tpl
  1. Все дочерние и родительская категория используют этот заголовок.
  2. Обратная совместимость При отсутствии ЧПУ, либо при старых типах адресов (?c= или ?id=), логика плагина остаётся такой же — категория берётся из параметра или по ID из БД.

Пример структуры и работы

URL-примеры:

  • /ru/user-guide/projects-manual/tasks-general → шаблон: header.page.user-guide.tpl
  • /index.php?c=projects-manual → проверяется дерево, подмена, если projects-manual является дочерней для user-guide
  • /index.php?id=123 → определяется по ID категория, далее — по дереву

Итог:
Если страница относится к категории или подкатегории user-guide, плагин использует для неё заголовок header.page.user-guide.tpl.


Настройки

ПараметрТипОписание
parentcatstringКод родительской категории Page (например: user-guide)
  • Все подкатегории автоматически наследуют шаблон родителя.
  • Для разных родительских категорий можно создавать отдельные шаблоны.

Возможные ошибки и решения

ПроблемаПричинаРешение
Не подключается кастомный headerНеправильный код категории, нет шаблонаПроверьте значение parentcat и наличие файла-шаблона
Не работает на подкатегорияхПорядок сегментов URL не тот, $_GET['c'] пуст (ЧПУ)Плагин сам разбирает URL, не зависит от $_GET['c']
Файл не найденПерепутана директория или имя файлаДолжен лежать строго: themes/ваша_тема/header.page.user-guide.tpl
После смены темы — дефолтный headerФайл шаблона остался в старой темеСкопируйте шаблон для каждой новой темы
Не работает на корневой категорииОсобенность URL-драйвера или отсутствие слешаИсправлено — работает с любым вариантом
Кеш не сброшенИзменения шаблона не применяютсяОчистите кеш Cotonti через админку

FAQ и рекомендации

  • Можно ли работать с несколькими родительскими категориями одновременно?
    — Нет, текущая версия работает только с одной категорией за установку. Для разных веток используйте отдельные шаблоны и перенастраивайте parentcat.
  • Вложенные категории
    — Любая вложенность дерева поддерживается, поиск по цепочке родителей.
  • Права доступа
    — Плагин влияет только на шаблон заголовка. Права доступа к категориям берутся из Cotonti.
  • Возвращение стандартного заголовка
    — Если категория не соответствует настройке — будет использован стандартный header.tpl.

Ограничения

  • Плагин работает только с модулем page;
  • Не проверяет права доступа пользователя;
  • Не обрабатывает другие модули (например, news, forums и т.д.);
  • Одновременно использует только один шаблон по выбранной родительской категории.

Требования

  • Cotonti Siena ≥0.9.26
  • PHP ≥8.4
  • Модули: page и structure (установлены и активны)

Структура файлов плагина

plugins/pagemycatheader/
├─ pagemycatheader.setup.php # Метаданные, регистрация и настройки
├─ pagemycatheader.functions.php # Базовые функции: проверка принадлежности к дереву категории
├─ pagemycatheader.header.first.php # Главная логика подключения, работа с URL и настройками

Лицензия

BSD License © 2025 webitproff


Автор, поддержка, обратная связь

Автор: webitproff
GitHub проекта: https://github.com/webitproff/cotonti-pagemycatheader
Вопросы, баги, предложения — issues на GitHub.


Полезные ссылки


Плагин помогает организовать гибкое визуальное оформление для рубрик и их содержимого без лишнего дублирования шаблонов!
Если вашей задаче нужен динамический заголовок пользователю для группы категорий — pagemycatheader именно для этого.

Если плагин оказался полезным — поставьте ⭐ на GitHub!


как это под капотом:

1. datas\config-sample.php


$cfg['enablecustomhf'] = true;        // To enable header.$location.tpl and footer.$location.tpl

2. \system\header.php

...
   $mtpl_type = defined('COT_ADMIN') || defined('COT_MESSAGE') && $_SESSION['s_run_admin'] && cot_auth('admin', 'any', 'R') ? 'core' : 'module';
    if (Cot::$cfg['enablecustomhf']) {
        $mtpl_base = (defined('COT_PLUG') && !empty($e)) ? ['header', $e] : ['header', Cot::$env['location']];
    } else {
        $mtpl_base = 'header';
    }
    $t = new XTemplate(cot_tplfile($mtpl_base, $mtpl_type));
    /* === Hook === */
    foreach (cot_getextplugins('header.main') as $pl) {
        include $pl;
    }
    /* ===== */
    
 ... 

3. \system\footer.php

...
    $mtpl_type = (
       defined('COT_ADMIN')
       || (
           defined('COT_MESSAGE')
           && $_SESSION['s_run_admin']
           && cot_auth('admin', 'any', 'R')
       )
   ) ? 'core' : 'module';
   $mtpl_base = 'footer';
    if (Cot::$cfg['enablecustomhf']) {
       if (defined('COT_PLUG') && !empty($e)) {
           $mtpl_base = ['footer', $e];
       } elseif (!empty(Cot::$env['ext'])) {
           $mtpl_base = ['footer', Cot::$env['ext']];
       } elseif (!empty(Cot::$env['location'])) {
           $mtpl_base = ['footer', Cot::$env['location']];
       }
    }
    $t = new XTemplate(cot_tplfile($mtpl_base, $mtpl_type));
   // @todo pass develop mode
   $frontConfig = [
       'config' => [
           'serverEvents' => Cot::$cfg['serverEvents'] ?? ServerEventsDictionary::DRIVER_DISABLED,
       ],
       'lang' => [],
   ];
   /* === Hook === */
   foreach (cot_getextplugins('footer.main') as $pl) {
       include $pl;
   }
   /* ===== */
 ... 

 


Авторские права

© webitproff, 27 Nov 2025, License BSD.


Вы можете нанять меня или предложить задание

напишите в личные сообщения на этой странице

5 минут чтения Sodium Carbonate

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

webitproff

Оффлайн

Sodium Carbonate

Последняя авторизация: 04.08.2026 20:41

  • Страница размещена: 29.11.2025 12:17
  • Последнее обновление: 27.04.2026 17:22
  • Язык:

Похожие страницы

Шаблон сайта, верстка сайта и тема сайта: профессиональный гид
1 Профессиональный гид: шаблон сайта, верстка сайта и тема сайтаВ контексте использования Cotonti Siena v0.9.261.
Cotonti Siena CMF • 22.02.2026 20:04 webitproff
HTML-шаблон header.tpl в Cotonti
2 Основное назначение файла и его место в системе Cotonti: Файл header.tpl — это важный элемент в системе шаблонов
Шаблон сайта и тема сайта: Разъяснение терминов и правильное использование в контексте Cotonti Siena
3 В Cotonti Siena (версия 0.9.26 и близкие релизы) термины тема и шаблон имеют чёткое, но не всегда интуитивно очевидное
Файл header.php в Cotonti
4 Файл header.php в системной папке Cotonti CMF отвечает за формирование и обработку заголовка страницы сайта, который
Файл page.header.php в Cotonti
5 описание файла page.header.php в Cotonti CMF  1. Основное назначение и место в системе Cotonti Файл page.header.php