Плагин обновился 19.02.2026.
Сейчас плагин позволяет создавать дополнительный пользовательский шаблоны как по своей структуре, так и по именованию, предоставляя полную гибкость в использовании там, где именно вам нужно вывести дерево рубрик и категорий статей сайта, и именно в таком виде, как вы сверстаете свой пользовательский шаблон.
Плагин Tree Cats Page для Cotonti Siena 0.9.26+
Профессиональное техническое руководство (Теория + Практика)
Версия: 1.0
Совместимость: Cotonti Siena 0.9.26+
PHP: 8.4+
ЧАСТЬ I — АРХИТЕКТУРА, КОНЦЕПЦИЯ И ПРИНЦИПЫ ПРОЕКТИРОВАНИЯ (БЕЗ КОДА)
1. Введение
Tree Cats Page — это структурный плагин для модуля Page в системе управления контентом Cotonti Siena. Его задача — программно формировать и отображать иерархическое дерево категорий страниц в любом месте шаблонов сайта.
В отличие от стандартных навигационных блоков категорий, плагин:
- Строит полноценное рекурсивное дерево
- Поддерживает исключение категорий (черный список)
- Интегрируется с системой прав доступа Cotonti
- Учитывает мультиязычность (i18n)
- Позволяет полностью переопределять шаблоны вывода
- Четко разделяет логику и представление
Данный документ разделен на две профессиональные части:
- Теоретическая (архитектура и концепция)
- Практическая (реализация и примеры кода)
Руководство предполагает, что читатель знаком со структурой категорий Cotonti, системой шаблонов и архитектурой тем.
2. Постановка задачи
Модуль Page хранит категории в иерархической структуре:
structure.page
Однако большинство стандартных тем:
- Отображают только категории верхнего уровня
- Используют жестко прописанные ссылки
- Не поддерживают рекурсивный вывод
- Не предоставляют гибкого доступа к метаданным структуры
Для проектов следующих типов:
- Контентные маркетплейсы
- Блоговые платформы
- Базы знаний
- Новостные порталы
- Иерархические публикационные системы
Требуется полноценное динамическое дерево категорий.
Tree Cats Page решает эту задачу через:
- Универсальный генератор дерева
- Шаблонную систему вывода
- Интеграцию с Bootstrap 5.3 (offcanvas)
- Поддержку структурных метаданных
3. Архитектурный обзор
3.1 Логические уровни
Архитектура плагина построена по принципу разделения ответственности:
| Уровень | Назначение |
| Логика ядра | Чтение structure.page и фильтрация |
| Уровень прав доступа | Проверка прав на чтение |
| URL-слой | Генерация ссылок через cot_url() |
| Шаблонный слой | Отрисовка через XTemplate |
| Тема | Встраивание offcanvas-блока |
| Конфигурация | Обработка черного списка |
Такой подход обеспечивает:
- Предсказуемость поведения
- Поддерживаемость
- Независимость от темы
- Масштабируемость
4. Обработка структуры категорий
Плагин работает с:
structure.page
Каждая категория содержит:
- Код
- Путь
- Заголовок
- Описание
- Иконку (если задана)
- Количество страниц
- Родительскую категорию
- Дополнительные поля (extra fields)
Алгоритм построения дерева включает:
- Определение корневых элементов
- Рекурсивный обход
- Формирование дочерних узлов
- Фильтрацию по правам доступа
- Исключение по черному списку
- Применение локализации
На выходе формируется структурированный иерархический массив.
5. Модель прав доступа
Дерево отображается только если:
- Активен модуль Page
- Активен плагин
- Пользователь имеет право
R (read)
Плагин не изменяет систему безопасности Cotonti.
Он полностью полагается на стандартную модель прав доступа.
6. Черный список категорий
Параметр конфигурации:
blacktreecatspage
Позволяет указать через запятую коды категорий, которые не должны отображаться.
Это позволяет:
- Скрывать системные разделы
- Исключать технические категории
- Ограничивать структуру навигации
Фильтрация происходит до этапа рендеринга.
7. Поддержка мультиязычности (i18n)
Плагин автоматически использует:
- Локализованные заголовки
- Локализованные описания
- Мультиязычную структуру (если включена)
Отдельная система перевода не требуется.
8. Стратегия шаблонов
Основной шаблон:
treecatspage.page.tree.tpl
Однако можно создавать:
- Боковые шаблоны (sidebar)
- Подвальные (footer)
- Мега-меню
- Мобильные версии
- Специализированные блоки
Выбор шаблона происходит динамически.
Это делает плагин пригодным для сложных проектов.
9. Интеграция с Bootstrap 5.3
Интерфейс плагина основан на Bootstrap 5.3.
Причины выбора:
- Поддержка offcanvas
- Поддержка collapse
- Доступность (ARIA)
- Минимальный JS
Важно: Bootstrap должен быть подключен в теме.
10. Философия интеграции с темой
Плагин не привязан к конкретной теме.
Однако содержит готовую интеграцию для темы 2waydeal.
Для других тем:
- Нужно подключить offcanvas-блок
- Добавить кнопку-триггер
- Убедиться в наличии Bootstrap
11. Динамическая маршрутизация шаблонов
Вызов:
cot_build_structure_page_tree('', '', 0, 'sidebar')
Позволяет использовать альтернативный шаблон:
treecatspage.page.tree.sidebar.tpl
Возможные варианты:
| Контекст | Шаблон |
| sidebar | treecatspage.page.tree.sidebar.tpl |
| footer | treecatspage.page.tree.footer.tpl |
| header | treecatspage.page.tree.header.tpl |
12. Рекомендации по применению
Использовать при:
- Многоуровневых блогах
- Маркетплейсах
- Документационных порталах
- Корпоративных сайтах со сложной структурой
Не требуется для:
- Одностраничных сайтов
- Плоской структуры без подкатегорий
ЧАСТЬ II — ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ И ПРИМЕРЫ КОДА
1. Установка плагина
Скачайте архив плагина из официального репозитория.
Загрузите папку:
/plugins/treecatspage/
В директорию плагинов вашего сайта.
2. Интеграция в тему 2waydeal
В файле:
/themes/2waydeal/header.tpl
Добавьте:
{FILE "{PHP.cfg.themes_dir}/{PHP.cfg.defaulttheme}/inc/header/treecatspageLeftOffcanvas.tpl"}
Затем замените статические ссылки категорий на блок-триггер.
3. Интеграция в тему CleanCot
Если используется тема CleanCot:
Откройте:
/themes/cleancot/inc/header/treecatspageLeftOffcanvas.tpl
Измените контейнер:
<div class="offcanvas offcanvas-start bg-costum-dgrey"
tabindex="-1"
id="treecatspageLeftOffcanvas"
aria-labelledby="treecatspageLeftOffcanvasLabel">
Репозиторий темы:
cot-CleanCot
4. Проверка Bootstrap 5.3
В файле ресурсов темы должны присутствовать строки:
Resources::addFile('lib/bootstrap/css/bootstrap.min.css');
Resources::linkFileFooter('lib/bootstrap/js/bootstrap.bundle.min.js');
Без этого offcanvas работать не будет.
5. Файл functions.custom.php
Проверьте наличие:
/system/functions.custom.php
Если отсутствует — загрузите.
В файле:
/datas/config.php
Убедитесь:
$cfg['customfuncs'] = true;
6. Активация в админ-панели
Administration → Extensions → Tree Cats Page → Install
Настройте blacklist при необходимости.
7. Логика загрузки шаблона
$tpl_ExtCode = 'treecatspage';
$tpl_PartExt = 'page';
$tpl_PartExtSecond = 'tree';
$tpl_PartCostumTpl = $template;
$extTplFile = cot_tplfile(
[
$tpl_ExtCode,
$tpl_PartExt,
$tpl_PartExtSecond,
$tpl_PartCostumTpl
],
'plug',
true
);
$t1 = new XTemplate($extTplFile);
8. Создание бокового шаблона
Создайте:
/themes/yourtheme/plugins/treecatspage/treecatspage.page.tree.sidebar.tpl
Вызов в шаблоне:
<!-- IF {PHP|function_exists('cot_build_structure_page_tree')} AND {PHP|cot_auth('page', 'any', 'R')} -->
{PHP|cot_build_structure_page_tree('', '', 0, 'sidebar')}
<!-- ENDIF -->
9. Несколько вариантов шаблонов
Можно создать:
- treecatspage.page.tree.footer.tpl
- treecatspage.page.tree.mega.tpl
- treecatspage.page.tree.mobile.tpl
10. Пример кнопки открытия offcanvas
<li class="nav-item">
<a class="nav-link"
type="button"
data-bs-toggle="offcanvas"
data-bs-target="#treecatspageLeftOffcanvas"
aria-controls="treecatspageLeftOffcanvas">
<i class="fa-regular fa-newspaper me-2"></i>
Publications
</a>
</li>
11. Рекомендации по безопасности
- Не удаляйте проверки cot_auth()
- Не хардкодьте ссылки
- Используйте cot_url()
- Не отключайте права доступа
12. Производительность
При большой структуре:
- Используйте blacklist
- Не выводите дерево на всех страницах без необходимости
- Применяйте кэширование
13. Итог
Tree Cats Page — это профессиональный инструмент построения динамического дерева категорий для:
Cotonti Siena 0.9.26+
Он обеспечивает:
- Рекурсивную иерархию
- Гибкую интеграцию
- Разделение логики и представления
- Расширяемость
- Совместимость с Bootstrap 5.3
Для проектов со сложной структурой контента данный плагин значительно расширяет возможности стандартного модуля Page.
Автор: webitproff
Дата: 19/02/2026
Версия: 1.0/2