Как устроена проверка активности плагина в шаблонах

При разработке или редактировании плагинов на Cotonti иногда встречается аномалия, не срабатывает условие проверки активности плагина через функцию, а точнее она возвращает "false". Как исправить?

Как устроена проверка активности плагина в шаблонах

cot_plugin_active() вызывает ExtensionsService::isPluginActive(), который ищет код плагина в глобальном массиве $cot_plugins_enabled. Этот массив заполняется на раннем этапе загрузки системы на основе таблицы cot_core: в него попадают только записи с ct_plug = 1. Таким образом, плагин считается активным исключительно по наличию в этом массиве, а не по присутствию файлов в папке plugins/ или загрузке его кода через хуки.

Почему при разработке или редактировании плагина cot_plugin_active может возвращать false, даже если плагин установлен

При редактировании плагина файлы часто заменяются напрямую, без переустановки. Если в процессе была повреждена или удалена запись в cot_core (например, сбросилась в ct_plug = 0), плагин пропадает из $cot_plugins_enabled. Кроме того, сайдбар или другой фрагмент шаблона может рендериться на этапе, когда массив активных плагинов ещё не сформирован (например, через хук global). Код плагина через этот же хук уже подключён и работает, но проверка cot_plugin_active() в шаблоне видит пустой массив и возвращает false.


Проблема:
В шаблоне используется условие:

smarty

<!-- IF {PHP|cot_plugin_active('myplugin')} -->
 {PHP|myplugin_function(...)}
<!-- ENDIF -->

Блок не выводится, потому что cot_plugin_active('myplugin') возвращает false. При этом прямой вызов {PHP|myplugin_function(...)} без условия работает. С другими плагинами такой ошибки нет.

Причина:
cot_plugin_active() проверяет наличие плагина в глобальном массиве $cot_plugins_enabled, который заполняется из таблицы cot_core (где ct_plug = 1). Если плагин myplugin отсутствует в этой таблице или имеет ct_plug = 0, система не считает его активным, даже если его PHP-файлы лежат в папке plugins/myplugin и загружаются через хуки.

Почему так бывает:

  • Плагин был скопирован вручную без установки через админку.
  • Запись в cot_core была повреждена или удалена, а файлы остались.
  • Плагин работает через хуки, но не зарегистрирован как активный.
  • При разработке файлы плагина обновляются без переустановки, из-за чего запись в БД теряет актуальность.
  • Шаблон (например, сайдбар) рендерится раньше, чем $cot_plugins_enabled полностью заполнен (например, на хуке global), хотя код плагина уже загружен этим же хуком.

Как проверить:

  1. Временно вставьте в шаблон {PHP|var_dump($GLOBALS['cot_plugins_enabled'])} — если ключа myplugin нет, причина подтверждена.
  2. Выполните SQL-запрос:

    sql

    SELECT ct_code, ct_plug FROM cot_core WHERE ct_code ='myplugin';

    Если запись отсутствует или ct_plug = 0 — проблема в этом.

Решение (выберите одно):

Способ 1 — переустановка плагина (рекомендуется)
Зайдите в админ-панель → «Расширения», найдите myplugin и нажмите «Удалить» а затем снова «Установить». Это создаст/обновит запись в cot_core с ct_plug = 1.

Способ 2 — ручное исправление в БД
Выполните SQL (если записи нет):

sql

INSERTINTO cot_core (ct_code, ct_plug, ct_title, ct_version)
VALUES('myplugin',1,'Название плагина','1.0.0');

Если запись есть, но ct_plug = 0:

sql

UPDATE cot_core SET ct_plug =1WHERE ct_code ='myplugin';

После этого очистите кеш (папка /cache).

Способ 3 — обходной (проверка существования функции)
Вместо cot_plugin_active используйте:

smarty

<!-- IF {PHP|function_exists('myplugin_function')} -->
 {PHP|myplugin_function(...)}
<!-- ENDIF -->

Это работает, если файлы плагина загружаются через хуки, и не зависит от записи в БД.

После любого из этих действий условие cot_plugin_active('myplugin') начнёт возвращать true.

3 minutes read Sodium Carbonate

Comments (0)

No comments yet
Only registered users can post new comments

Page Discussion in Telegram

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-06-07 00:32

  • Page published: 2026-06-06 22:22
  • Last update: 2026-06-07 00:24

Similar pages

Проверка прав пользователей "cot_auth()" в шаблонах Cotonti
1 Примеры использования cot_auth() в шаблонах Cotonti с разными масками прав (R, W, A, etc.) и с категориями тоже. Как
Проверка владельца контента в Cotonti Siena v0.9.26 на PHP 8.4
2 Проверка владельца контента в Cotonti Siena v0.9.26 на PHP 8.4В Cotonti Siena v0.9.26, работающей на PHP 8.4,
Как изменить расположение папки с изображениями плагина Attach2
3 При оптимизации сайта возникают различные ситуации. Одной из них является смена расположения папки с картинками,
Настройка плагина Mavatars на Cotonti
4 Mavatars - это универсальный плагин, который позволяет прикреплять к записям на сайте любые файлы, в том числе
Заготовка плагина подписки на "Pages" по категориям
5 Заготовка, которая позволит написать плагин для Cotonti CMF, который позволит пользователям подписываться на обновления