Плагин "Table of Contents" для Cotonti - Руководство пользователя

Подробное руководство как строить иерархические меню (деревья), состоящие из элементов различных типов: ссылок на категории, на отдельные страницы или на произвольные URL.

0 Опубликована Опубликовано в: Cotonti Siena CMF > Авторские плагины для Cotonti

Руководство по плагину Table of Contents Page (toc_page) для Cotonti

Версия: 1.1.4
Дата: 24 августа 2026 года

Оглавление


Введение

О плагине

Table of Contents Page (toc_page) — это плагин для системы управления контентом Cotonti, предназначенный для создания управляемых оглавлений на страницах сайта. Он позволяет строить иерархические меню (деревья), состоящие из элементов различных типов: ссылок на категории, на отдельные страницы или на произвольные URL. Элементы можно вручную сортировать, задавать родительско-дочерние связи, включать или отключать, а также переводить заголовки и URL на разные языки.

Плагин особенно полезен для:

  • создания баз знаний и справочных разделов;
  • навигационных меню с ручным управлением;
  • иерархических оглавлений длинных руководств;
  • мультиязычных навигационных структур.

Главная особенность — полный контроль над порядком и вложенностью элементов, что выгодно отличает плагин от автоматически генерируемых меню на основе структуры категорий или страниц.

Возможности

  • Неограниченное количество деревьев: можно создавать несколько независимых оглавлений для разных разделов сайта.
  • Три типа элементов:
    • Категория — ссылка на категорию Cotonti;
    • Страница — ссылка на конкретную страницу;
    • Произвольная ссылка — любой внешний или внутренний URL.
  • Ручная сортировка: каждому элементу задаётся числовой порядок внутри своего родителя.
  • Иерархия: неограниченная вложенность элементов.
  • Мультиязычность: перевод заголовков и URL на дополнительные языки (при включении).
  • AJAX-поиск страниц: удобный выбор страницы через Select2 вместо громоздкого выпадающего списка.
  • Пагинация в админ-панели для работы с большими деревьями.
  • Редактирование типа элемента после создания.
  • Генератор SQL-дампа: позволяет быстро импортировать готовую структуру дерева из HTML-списка.
  • Простая интеграция: вывод дерева одной функцией в любом шаблоне.
  • Безопасность: поддержка прав доступа, AJAX-запросы защищены.

Требования

  • Cotonti версии 1.0 или выше (рекомендуется актуальная).
  • PHP 8.5 или выше.
  • MySQL 8.4 или выше (с поддержкой InnoDB и utf8mb4).
  • Модуль Page должен быть включён (обязательно).
  • Для мультиязычности рекомендуется плагин i18n (опционально).

Установка и настройка

Установка плагина

  1. Скачайте архив плагина toc_page.
  2. Распакуйте архив в директорию plugins/ вашего сайта Cotonti. Должна получиться структура:
plugins/
└── toc_page/
    ├── toc_page.setup.php
    ├── toc_page.admin.php
    ├── toc_page.functions.php
    ├── toc_page.ajax.php
    ├── lang/
    │   ├── toc_page.ru.lang.php
    │   ├── toc_page.en.lang.php
    │   └── toc_page.uk.lang.php
    ├── tpl/
    │   ├── toc_page.admin.tpl
    │   └── toc_page.tpl
    └── setup/
        └── toc_page.install.sql
  1. Зайдите в административную панель Cotonti.
  2. Перейдите в раздел «Расширения» (Extensions) → «Плагины».
  3. Найдите в списке Table of Contents Page и нажмите «Установить».
  4. После успешной установки плагин будет активирован.

При установке будут созданы три таблицы в базе данных:

  • cot_toc_page_trees — деревья (заголовки, описания, временные метки);
  • cot_toc_page_items — элементы деревьев (тип, ссылка, заголовок, URL, сортировка, статус);
  • cot_toc_page_i18n — переводы полей элементов (item_title, item_url и др.).

Примечание. Если у вас другой префикс таблиц (например, my_), замените cot_ в SQL-файле на ваш префикс перед установкой. Обычно это можно сделать автоматически при установке, если система использует динамический префикс, но для надёжности проверьте.

Первоначальная настройка

После установки перейдите в «Настройки» → «Плагины» → Table of Contents Page. Доступны следующие параметры:

ПараметрОписаниеЗначение по умолчанию
default_treeID дерева по умолчанию. Используется, если функция cot_toc_page_render() вызывается без явного указания ID.0
toc_page_i18n_useВключить/выключить мультиязычность.Выключено
toc_page_i18n_lang_code_defaultКод основного языка сайта (должен совпадать с $cfg['defaultlang']).ru
toc_page_i18n_lang_code_firstКод первого дополнительного языка.en
toc_page_i18n_lang_code_first_useИспользовать первый дополнительный язык.Включено
toc_page_i18n_lang_code_secondКод второго дополнительного языка.ua
toc_page_i18n_lang_code_second_useИспользовать второй дополнительный язык.Выключено
toc_page_select2_useИспользовать AJAX-поиск страниц через Select2.Выключено

Рекомендуется сразу установить default_tree после создания первого дерева, чтобы функция вывода работала без параметров.

Конфигурация мультиязычности

  1. Включите опцию «Мультиязычность активировать и использовать».
  2. Укажите код основного языка в поле toc_page_i18n_lang_code_default. Это должен быть тот же код, что и глобальная настройка Cotonti $cfg['defaultlang']. Заголовки элементов в основной таблице cot_toc_page_items считаются оригиналом для этого языка.
  3. Для каждого дополнительного языка:
    • задайте его код (например, en, uk, de);
    • включите флаг «Использовать …».
  4. Сохраните настройки.

Теперь в административной панели плагина появится вкладка «Переводы», где можно вводить переводы заголовков и URL для каждого активного дополнительного языка.

Важно: если у вас уже есть элементы, включение мультиязычности не изменит их оригинальные значения; они останутся в основной таблице.

Настройка Select2

Select2 — это улучшенный выпадающий список с поиском. В плагине он используется для выбора страницы в формах добавления/редактирования элемента.

Как включить:

  1. В настройках плагина найдите опцию «использовать поиск статей через select2».
  2. Установите значение «Да».
  3. Сохраните.

После этого в форме добавления элемента типа «Страница» обычный <select> заменится на поле с автодополнением. При вводе минимум двух символов выполняется AJAX-запрос к серверу, который возвращает список страниц, соответствующих запросу.

Select2 подключается автоматически из ресурсов Cotonti. Если вы хотите настроить минимальную длину ввода, это можно изменить в коде (minimumInputLength: 2) в файлах toc_page.admin.php (два места: для вкладки редактирования дерева и для вкладки редактирования элемента). По умолчанию порог — 2 символа.

Управление деревьями

Создание дерева

  1. Перейдите в административный раздел плагина: «Другое» → «Table of Contents Page».
  2. Откройте вкладку «Деревья».
  3. Внизу страницы находится форма «Добавить дерево»:
    • Название дерева — обязательное поле (например, «База знаний»).
    • Описание — необязательное краткое описание (отображается только в админке).
  4. Нажмите кнопку «Создать».

После сохранения дерево появится в таблице списка деревьев с присвоенным ID.

Редактирование дерева

Каждое дерево в списке имеет кнопку «Изменить» (иконка карандаша). При нажатии на неё форма редактирования откроется прямо в списке (вкладка «Деревья»). Изменяемые поля: название и описание. Нажмите «Обновить», чтобы сохранить.

Удаление дерева

В списке деревьев для каждого дерева есть кнопка «Удалить». При удалении:

  • удаляются все элементы этого дерева из cot_toc_page_items;
  • удаляются все переводы этих элементов из cot_toc_page_i18n (каскадно);
  • удаляется запись о дереве из cot_toc_page_trees.

Удаление необратимо — перед этим рекомендуется сделать резервную копию базы данных.

Код для вставки дерева

В колонке «Код для вставки» для каждого дерева автоматически генерируется готовый код, который нужно вставить в TPL-шаблон страницы или в PHP-код.

Пример кода:

<!-- IF {PHP|cot_plugin_active('toc_page')} -->
{PHP|cot_toc_page_render(1)}
<!-- ENDIF -->

Здесь 1 — ID дерева. Вы можете скопировать этот код кнопкой «Копировать» и вставить в нужное место.

Управление элементами

Добавление элемента

  1. Перейдите на вкладку «Редактирование дерева» (кнопка «Элементы» напротив нужного дерева в списке деревьев).
  2. Внизу страницы расположена форма «Добавить элемент».
  3. Выберите тип элемента:
    • Категория — потребуется выбрать категорию из выпадающего списка.
    • Страница — потребуется выбрать страницу (обычным списком или через Select2).
    • Произвольная ссылка — потребуется ввести URL.
  4. Заполните заголовок (если оставить пустым для типа «Страница» или «Категория», заголовок может быть автоматически взят из связанного объекта).
  5. При необходимости выберите родителя из списка (по умолчанию — «Верхний уровень»).
  6. Нажмите «Добавить».

Новый элемент будет добавлен в конец списка своего родителя с автоматически вычисленным порядковым номером (item_sort).

Типы элементов

Категория

При выборе этого типа необходимо указать категорию из структуры страниц Cotonti. В поле item_ref сохраняется код категории. При выводе на сайте ссылка будет вести на страницу категории, а заголовок (если не задан вручную) — браться из названия категории.

Если категория позже будет удалена или переименована, плагин покажет заголовок, сохранённый в item_title, либо выведет «Категория не найдена».

Страница

Тип «Страница» требует выбора конкретной страницы из списка опубликованных страниц (page_state = 0). В item_ref хранится числовой ID страницы. При выводе формируется URL страницы, заголовок берётся из названия страницы или из поля item_title.

При использовании AJAX-поиска Select2 можно быстро найти нужную страницу по названию.

Произвольная ссылка

Этот тип позволяет указать любой внешний или внутренний URL (например, https://example.com или /some/page). В item_ref ничего не сохраняется, а в item_url помещается введённый URL. Заголовок следует задать вручную в поле «Заголовок».

Редактирование элемента

Для редактирования элемента нажмите кнопку «Редактировать» (иконка карандаша) в строке элемента на вкладке «Редактирование дерева». Откроется отдельная вкладка «Элемент» с полной формой редактирования.

Здесь можно изменить:

  • тип элемента;
  • связанный объект (категорию, страницу или URL);
  • заголовок;
  • родительский элемент;
  • порядок сортировки;
  • статус (включён/выключен).

После сохранения вы останетесь на странице редактирования, чтобы видеть внесённые изменения.

Изменение типа элемента

Раньше после создания элемента его тип нельзя было изменить. В версии 1.1.4 эта проблема решена: в форме редактирования элемента (вкладка «Элемент») есть выпадающий список «Тип». Вы можете свободно переключать тип между «Категория», «Страница» и «Произвольная ссылка». Соответствующие поля для выбора объекта будут меняться автоматически при помощи JavaScript.

Сортировка и порядок

Порядок элементов внутри одного родителя определяется числом в поле item_sort. Оно заполняется автоматически при добавлении элемента (максимальное значение + 1). Изменить порядок можно двумя способами:

  1. В общем списке (вкладка «Редактирование дерева»): измените число в колонке «Порядок» и нажмите «Сохранить изменения» внизу таблицы.
  2. В форме редактирования элемента: в поле «Порядок» укажите нужное число.

Рекомендуется использовать последовательные числа (1, 2, 3...). Элементы с одинаковым порядком сортируются по ID.

Иерархия и родительские элементы

Каждый элемент может иметь родителя, выбранного из списка всех элементов этого же дерева. Верхний уровень соответствует parent_id = 0. Вложенность не ограничена. При выводе на сайте вложенные элементы автоматически помещаются внутрь <ul> родительского элемента.

В списке родительских элементов невозможно выбрать самого себя (для избежания циклов) — это учтено в форме редактирования элемента.

Включение и отключение

Каждый элемент имеет флаг «Включено». Если флаг снят, элемент не выводится на сайте, но остаётся в базе данных. Это удобно для временного скрытия пунктов меню без удаления.

Управление флагом:

  • В таблице списка элементов — чекбокс в колонке «Включено».
  • В форме редактирования элемента — аналогичный чекбокс.

Удаление элемента

Для удаления элемента на вкладке «Редактирование дерева» нажмите кнопку «Удалить» (красная иконка). При удалении:

  • сам элемент удаляется;
  • все его дочерние элементы удаляются рекурсивно;
  • все переводы удалённых элементов также удаляются (каскадно из-за внешнего ключа).

Перед удалением появится запрос подтверждения.

Мультиязычность

Включение и настройка языков

Подробная настройка описана в разделе «Конфигурация мультиязычности». Напомним:

  1. Включите опцию toc_page_i18n_use.
  2. Укажите основной язык (toc_page_i18n_lang_code_default).
  3. Включите нужные дополнительные языки (toc_page_i18n_lang_code_first_use и т.д.) и задайте их коды.

Перевод заголовков и URL

После включения мультиязычности в админке плагина появляется вкладка «Переводы». Она доступна только если выбран конкретный дерево (слева в списке деревьев). На этой вкладке отображается таблица всех элементов дерева с полями для каждого активного дополнительного языка:

  • Заголовок — перевод названия элемента;
  • URL — перевод ссылки (если нужно, например, для разных языковых версий страниц).

Оригинальные значения (на основном языке) показываются в столбце «Заголовок» без возможности редактирования (они редактируются на вкладке «Редактирование дерева» или «Элемент»).

Чтобы сохранить переводы, заполните нужные поля и нажмите «Сохранить изменения». Пустые поля удаляют перевод (если он был), оставляя оригинал для этого языка.

Как работает определение языка

Определение текущего языка происходит в функции toc_page_i18n_get_value(). Логика:

  1. Если мультиязычность выключена — возвращается оригинал.
  2. Определяется основной язык из настроек плагина (toc_page_get_default_lang()).
  3. Определяется язык текущего посетителя (Cot::$usr['lang'] или основной, если гость).
  4. Если текущий язык совпадает с основным — всегда возвращается оригинал (переводы для основного языка не используются).
  5. Иначе загружается перевод из cot_toc_page_i18n по item_id, field_name, lang. Если перевод найден — возвращается он, иначе оригинал.

Таким образом, для основного языка всегда используются оригинальные поля, а переводы применяются только для дополнительных языков.

Функции для разработчиков i18n

Для разработчиков в файле toc_page.functions.php доступны следующие функции:

  • toc_page_i18n_enabled() — проверяет, включена ли мультиязычность.
  • toc_page_get_active_langs() — возвращает массив кодов активных дополнительных языков.
  • toc_page_get_default_lang() — возвращает код основного языка.
  • toc_page_i18n_load($itemId, $fieldName, $lang) — загружает перевод.
  • toc_page_i18n_save($itemId, $fieldName, $lang, $value) — сохраняет/удаляет перевод.
  • toc_page_i18n_get_value($itemId, $fieldName, $originalValue) — возвращает значение с учётом перевода.

Эти функции можно использовать в собственных расширениях или шаблонах.

Интеграция с Cotonti

Вывод дерева на странице

Плагин предоставляет простой способ вывести дерево в любом месте сайта. Для этого используется функция cot_toc_page_render($treeId).

Способы вызова:

  1. В TPL-шаблоне:
{PHP|cot_toc_page_render(1)}

Где 1 — ID дерева.

  1. В PHP-коде (например, в модуле или плагине):
$out = cot_toc_page_render(1);

Затем передайте $out в шаблон.

Функция возвращает готовый HTML, сгенерированный по шаблону toc_page.tpl.

Функция cot_toc_page_render()

Сигнатура:

function cot_toc_page_render($treeId, $tpl = 'toc_page')

Параметры:

  • $treeId — ID дерева, которое нужно отобразить.
  • $tpl — имя шаблона (без расширения .tpl). По умолчанию toc_page.

Функция:

  1. Получает все включённые элементы дерева через toc_page_get_tree().
  2. Вызывает рекурсивный рендеринг toc_page_display().
  3. Возвращает HTML.

Если дерево пустое или ID неверный, вернёт пустую строку.

Шаблон toc_page.tpl

Файл toc_page.tpl (в папке tpl/) управляет вёрсткой дерева. По умолчанию он имеет следующую структуру:

<!-- BEGIN: LIST -->
<ul class="toc-page level-{LIST_LEVEL}">
    <!-- BEGIN: ROW -->
    <li class="toc-page-item level-{ROW_LEVEL}">
        <!-- IF {ROW_URL} -->
        <a href="{ROW_URL}">{ROW_TITLE}</a>
        <!-- ELSE -->
        <span class="toc-page-title">{ROW_TITLE}</span>
        <!-- ENDIF -->
        {ROW_ITEMS}
    </li>
    <!-- END: ROW -->
</ul>
<!-- END: LIST -->

Вы можете изменить этот шаблон под свой дизайн. Доступные переменные:

  • {LIST_LEVEL} — уровень вложенности корневого списка (обычно 0);
  • {ROW_LEVEL} — уровень конкретного элемента;
  • {ROW_URL} — сгенерированная ссылка (если есть);
  • {ROW_TITLE} — заголовок (с учётом перевода и очистки HTML);
  • {ROW_ITEMS} — рекурсивно сгенерированный HTML дочерних элементов.

Использование в TPL-шаблонах

Наиболее распространённый сценарий — вставить дерево в боковую панель или в контент страницы. Пример:

<div class="block">
    <h3>База знаний</h3>
    {PHP|cot_toc_page_render(1)}
</div>

Если нужно вывести разные деревья на разных страницах, можно использовать условные операторы Cotonti или PHP-логику в шаблоне.

Для глобальной видимости функции в TPL убедитесь, что плагин активен и функция зарегистрирована (это происходит автоматически при подключении toc_page.functions.php).

AJAX-поиск страниц (Select2)

Включение

Чтобы использовать Select2 для выбора страниц, включите опцию «использовать поиск статей через select2» в настройках плагина.

Как работает

При включённом Select2 в формах добавления/редактирования элемента типа «Страница» вместо стандартного <select> появляется скрытое поле и элемент Select2. Пользователь вводит минимум 2 символа, после чего отправляется AJAX-запрос на публичный URL index.php?r=toc_page&ajax=search&q=.... Сервер (файл toc_page.ajax.php) ищет страницы, у которых page_state = 0 и название содержит введённую подстроку (без учёта регистра). Результаты возвращаются в формате JSON для Select2.

Дополнительно фильтруются права доступа: только администраторы могут использовать поиск (в текущей реализации проверка cot::$usr['isadmin']). Для не-администраторов доступ не предусмотрен, так как AJAX используется только в админке.

Настройка минимальной длины

Минимальная длина ввода для поиска задаётся в JavaScript-коде в файлах toc_page.admin.php (в двух местах: вкладка «Редактирование дерева» и вкладка «Редактирование элемента»). Найдите строку:

minimumInputLength: 2,

и замените 2 на нужное число. После изменения сохраните файл и очистите кеш браузера.

Генератор SQL-дампа

Назначение

Скрипт generate_toc_dump.php предназначен для автоматического создания SQL-дампа таблиц плагина на основе HTML-списка. Это удобно, когда нужно быстро импортировать готовую структуру дерева (например, из существующего статического меню) без ручного добавления элементов в админке.

Подготовка HTML-списка

HTML-список должен быть валидным вложенным списком <ul><li>. Правила:

  • Каждый пункт — <li>, который может содержать вложенный <ul>.
  • <nav></nav> внутри <li> игнорируется (можно не писать).
  • HTML-сущности автоматически преобразуются.
  • Не оставляйте лишних пробелов между закрывающим </li> и следующим <li>.

Пример:

<ul>
    <li>Родитель
        <ul>
            <li>Дочерний 1</li>
            <li>Дочерний 2</li>
        </ul>
    </li>
    <li>Ещё родитель</li>
</ul>

Создание дампа

  1. Откройте файл generate_toc_dump.php в редакторе.
  2. Вставьте свой HTML в переменную $html (между <<<'HTML' и HTML;).
  3. Заполните массив $translations (если нужны переводы), где ключ — оригинал, значение — перевод.
  4. Укажите параметры дерева: $treeId, $treeTitle, $treeDescription.
  5. Проверьте префикс таблиц (по умолчанию cot_). При необходимости замените.
  6. Загрузите файл в корень сайта через FTP.
  7. Запустите в браузере: https://ваш-домен/generate_toc_dump.php.
  8. Скрипт создаст файл toc_page_dump_YYYYMMDD_HHMMSS.sql в корне сайта.
  9. Скачайте этот файл по FTP.

Импорт в базу

  1. Зайдите в phpMyAdmin и выберите вашу базу данных.
  2. Перейдите на вкладку «Импорт».
  3. Выберите скачанный .sql файл.
  4. Убедитесь, что кодировка utf-8.
  5. Нажмите «Импортировать».

Важно: скрипт при импорте удаляет существующие таблицы cot_toc_page_* и создаёт их заново. Сделайте резервную копию, если у вас уже есть данные.

После импорта дерево появится в админке плагина.

Расширенные функции

Функции для получения данных

В файле toc_page.functions.php определены следующие функции:

  • toc_page_get_tree($treeId) — возвращает вложенный массив всех включённых элементов дерева. Каждый элемент содержит все поля таблицы + children (массив дочерних).
  • cot_toc_page_render($treeId, $tpl = 'toc_page') — рендерит дерево по шаблону.
  • toc_page_display($items, $level, $tpl) — рекурсивно выводит элементы. Обычно не вызывается напрямую.

Для разработчиков также доступны функции мультиязычности, описанные ранее.

Работа с переводами напрямую

Если вам нужно программно добавить или получить перевод, используйте:

// Загрузить перевод
$translated = toc_page_i18n_load($itemId, 'item_title', 'en');

// Сохранить перевод
toc_page_i18n_save($itemId, 'item_title', 'en', 'English title');

// Удалить перевод (передать null или пустую строку)
toc_page_i18n_save($itemId, 'item_title', 'en', '');

Эти функции автоматически обрабатывают вставку/обновление/удаление.

Часто задаваемые вопросы

Почему не отображается дерево?

  • Проверьте, что плагин активирован.
  • Убедитесь, что ID дерева правильный и дерево содержит хотя бы один включённый элемент.
  • Проверьте, что в TPL-шаблоне используется правильный вызов {PHP|cot_toc_page_render(ID)}.
  • Очистите кеш Cotonti.
  • Убедитесь, что элементы не отключены (флаг «Включено»).

Как изменить тип элемента?

  1. Откройте вкладку «Редактирование дерева».
  2. Найдите нужный элемент и нажмите кнопку «Редактировать».
  3. В открывшейся вкладке «Элемент» измените тип в выпадающем списке.
  4. Заполните соответствующие поля (категорию, страницу или URL).
  5. Нажмите «Обновить».

Как добавить новый язык?

  1. В настройках плагина включите мультиязычность.
  2. В поле для дополнительного языка введите код (например, de) и включите флаг «Использовать».
  3. Сохраните настройки.
  4. Перейдите на вкладку «Переводы» и заполните переводы.

Максимум поддерживается два дополнительных языка (плюс основной).

Как удалить плагин?

  1. Сделайте резервную копию базы данных.
  2. В админке Cotonti перейдите в «Расширения» → «Плагины».
  3. Найдите Table of Contents Page и нажмите «Удалить».
  4. При необходимости удалите файлы плагина из директории plugins/toc_page.

Внимание: при удалении плагина таблицы cot_toc_page_* обычно удаляются автоматически. 
Если что-то ну пошло не так... то, чтобы полностью очистить базу, удалите их вручную через phpMyAdmin (установить чекбоксы напротив таблиц, затем "выделенные" - "удалить") или еажмите на вкладку "SQL" и выполните SQL-запрос ниже (с поправкой на префикс своих таблиц)

DROP TABLE IF EXISTS `cot_toc_page_i18n`;
DROP TABLE IF EXISTS `cot_toc_page_items`;
DROP TABLE IF EXISTS `cot_toc_page_trees`;

Примеры

Простое дерево

Допустим, нужно создать боковое меню с тремя пунктами:

- Главная
- О нас
- Контакты

Шаги:

  1. Создайте дерево с ID 1.
  2. Добавьте три элемента типа «Произвольная ссылка» с URL: /, /about, /contacts.
  3. Установите порядок 1, 2, 3.
  4. Вставьте в шаблон:
<div class="sidebar">
    {PHP|cot_toc_page_render(1)}
</div>

Дерево с подуровнями

Структура:

- Услуги
  - Разработка
  - Дизайн
- Портфолио
  - Сайты
  - Логотипы

Реализация:

  1. Добавьте элементы «Услуги» и «Портфолио» как родительские (родитель = 0).
  2. Добавьте дочерние элементы, выбрав в поле «Родитель» соответствующий родительский элемент.
  3. Настройте порядок.

Мультиязычное дерево

Требуется вывести меню на русском и английском.

  1. Включите мультиязычность, задайте основной язык ru, дополнительный en.
  2. Создайте элементы с русскими заголовками.
  3. Перейдите на вкладку «Переводы», введите английские заголовки для каждого элемента.
  4. При посещении сайта на английском языке заголовки автоматически заменятся.

Если для какого-то элемента перевод не задан, отобразится русский оригинал.


Это руководство охватывает основные аспекты работы с плагином Table of Contents Page версии 1.1.4. За дополнительной информацией обращайтесь к документации на GitHub или на форум поддержки.




ПРИЛОЖЕНИЕ 1. 

функции и переменные, определённые и используемые в PHP-файле toc_page.admin.php:


Глобальные переменные / Инициализация

ПеременнаяТипНазначение
$tabстрокаТекущая вкладка администратора ('trees', 'edit', 'i18n', 'edit_element')
$treeIdцелоеID выбранного дерева
$aстрокаПараметр действия (update_tree, edit_tree, add, delete, save, add_item и т.д.)
$i18nActiveлогическийВключена ли мультиязычная поддержка
$activeLangsмассивСписок активных дополнительных языков
$defaultLangстрокаКод основного языка
$perPageцелоеКоличество элементов на странице (пагинация)
$tXTemplateОбъект шаблона для отображения админ-интерфейса

Подключаемые функции (из внешних файлов)

ФункцияИсточникНазначение
cot_langfile()Ядро CotontiЗагружает языковой файл
cot_incfile()Ядро CotontiПодключает файлы плагина
cot_import()Ядро CotontiБезопасно импортирует GET/POST/COOKIE параметры
cot_redirect()Ядро CotontiПеренаправляет на URL
cot_url()Ядро CotontiГенерирует URL с параметрами
cot_inputbox()Ядро CotontiСоздаёт HTML-элемент ввода
cot_selectbox()Ядро CotontiСоздаёт HTML-выпадающий список
cot_confirm_url()Ядро CotontiОборачивает URL в диалог подтверждения
cot_message()Ядро CotontiДобавляет сообщение в очередь вывода
cot_die_message()Ядро CotontiПоказывает сообщение об ошибке и завершает работу
cot_tplfile()Ядро CotontiПолучает путь к файлу шаблона
cot_display_messages()Ядро CotontiВыводит накопленные сообщения в шаблоне
cot_import_pagenav()Ядро CotontiРазбирает параметр пагинации
cot_pagenav()Ядро CotontiГенерирует навигацию пагинации
cot_generatePaginationTags()Ядро CotontiСоздаёт теги пагинации для шаблона
toc_page_i18n_enabled()функции toc_pageПроверяет, включена ли i18n
toc_page_get_active_langs()функции toc_pageВозвращает список активных языков
toc_page_get_default_lang()функции toc_pageВозвращает язык по умолчанию
toc_page_i18n_load()функции toc_pageЗагружает перевод для элемента
toc_page_i18n_save()функции toc_pageСохраняет перевод для элемента

Основные блоки обработки данных (по вкладкам)

Вкладка: trees — Управление деревьями оглавления

  • Действие: update_tree — Обновить название/описание дерева
  • Действие: edit_tree — Показать форму редактирования дерева
  • Действие: add — Создать новое дерево
  • Действие: delete — Удалить дерево и все его элементы/переводы (рекурсивно)
  • Вывод: Перебор всех деревьев, отображение шаблона TREES_ROW

Вкладка: edit — Редактирование элементов внутри дерева

  • Действие: delete_item — Удалить элемент и все дочерние рекурсивно
  • Действие: save — Сохранить изменения нескольких элементов (parent_id, sort, title, enabled)
  • Действие: add_item — Вставить новый элемент (тип category, page или custom)
  • Вывод: Пагинированный список элементов; формы для добавления новых элементов
  • Особенности:
    • Интеграция Select2 AJAX (если включена) для поиска страниц
    • Выпадающий список родительского элемента (иерархия)
    • Селектор типа элемента (категория, страница, произвольная ссылка)

Вкладка: edit_element — Редактирование одного элемента

  • Действие: save_element — Обновить детали элемента (тип, ссылка, заголовок, URL, родитель, сортировка, включён)
  • Вывод: Форма с полным интерфейсом редактирования элемента
  • Особенности: Та же интеграция Select2 AJAX, что и при массовом редактировании

Вкладка: i18n — Мультиязычные переводы

  • Действие: save_i18n — Сохранить переводы заголовков/URL элементов на дополнительные языки
  • Вывод: Пагинированная таблица с полями перевода для каждого активного языка
  • Особенности: Отдельные поля перевода заголовка и URL для каждого языка

Операции с базой данных (через Cot::$db)

ОперацияТаблицаНазначение
INSERTtoc_page_treesСоздать новое дерево
UPDATEtoc_page_treesИзменить название/описание дерева
DELETEtoc_page_treesУдалить дерево
SELECTtoc_page_treesЗагрузить данные дерева
INSERTtoc_page_itemsДобавить элемент в дерево
UPDATEtoc_page_itemsИзменить свойства элемента
DELETEtoc_page_itemsУдалить элемент (с рекурсивным удалением дочерних)
SELECTtoc_page_itemsЗагрузить элементы дерева
DELETEtoc_page_i18nУдалить переводы
(неявно)toc_page_i18nЗагрузить/сохранить переводы через вспомогательные функции
SELECTcot_pagesПолучить доступные страницы для выпадающего списка

Назначенные переменные шаблона (XTemplate)

ПеременнаяОбластьНазначение
TAB_*_ACTIVEВсе вкладкиПометить активную вкладку классом 'active'
URL_*Все вкладкиURL-адреса для навигации по вкладкам
TREE_*trees, edit, i18nМетаданные дерева и действия
EDIT_TREE_*treesПоля формы редактирования
ADD_TREE_*treesПоля формы добавления
ITEM_*editПоля строки элемента (заголовок, тип, сортировка, включён и т.д.)
ADD_*_SELECTeditВыпадающие списки для добавления элементов (категории, страницы, родители)
ELEMENT_*edit_elementПоля формы редактирования одного элемента
I18N_*i18nСтроки таблицы переводов и заголовки языков
LANG_CODEi18nКод языка для полей перевода

Ключевой поток управления

  1. Логика перенаправления: Если активна вкладка edit или i18n, но дерево не выбрано, автоматически перенаправляет на первое дерево или на вкладку «Деревья»
  2. Проверки прав: В этом файле явных проверок нет (предполагается, что их выполняет роутер Cotonti)
  3. Рекурсивное удаление: При удалении и дерева, и элемента очищаются дочерние записи и переводы
  4. Пагинация: Элементы во вкладках edit и i18n разбиты на страницы; состояние URL сохраняется через параметр d
  5. Интеграция Select2: AJAX-поиск страниц динамически загружается, если включена настройка toc_page_select2_use

 

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

Оффлайн

Последняя авторизация: 13.10.2026 01:43

Обо мне кратко
Поддержка и разработка веб-проектов на CMF Cotonti: приватные мессенджеры через сайт, открытые и закрытые небольшие социальные сети, торговые площадки и маркетплейсы, портал биржи фриланса и услуг, каталоги товаров оптовых поставщиков, дропшиппинг-платформы, интернет-магазины и многое другое.
Смотреть разработки и скачать
Публичное портфолио моих работ и разработок
Телеграм для сообщений
@webitproff
Телеграм-канал
@s/aBuyFILE
Публичный профиль
  • Дата размещения 24.08.2026 23:30
  • Обновлено 25.08.2026 10:35

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

Плагин Userfields для Cotonti (без экстраполей). Дополнительные поля пользователя.
1 Плагин Userfields для Cotonti 0.9.26  Выводим дополнительные поля пользователя где угодно, в любом шаблоне, в любой
Обновление плагина Table of Contents Page (toc_page) до версии 1.1.4
2 Обновление плагина Table of Contents Page (toc_page) до версии 1.1.4Дата: 25 августа 2026 г.Мы рады сообщить о выпуске
Язык интерфейса пользователя и плагин i18n modified в Cotonti: полное руководство
3 Переменная $usr['lang'] в Cotonti и плагин i18n modified: полное справочное
Open Server 6.5.0 - Первый запуск. Руководство пользователя.
4 СодержаниеУстановка Open Server Panel 6.5.0. Руководство пользователя 2026 – Первый запуск на PHP 8.5Краткое знакомство
Разный визуальный редактор для админа и пользователя
5 CKEditor - Визуальный (WYSIWYG) редактор HTML-контента. Минимальный, обычный и расширенный визуальный редактор -