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

При разработке или редактировании плагинов на 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

Article multicategories

Additional categories where this article is shown as similar.

Page Discussion in Telegram

Content author

webitproff

Offline

Sodium Carbonate

Last logged: 2026-09-19 10:26

About me briefly
Support and development of web projects on the CMF Cotonti: private messengers via the website, open and closed small social networks, trading platforms and marketplaces, freelance and services exchange portal, catalogs of goods from wholesale suppliers, dropshipping platforms, online stores, and much more.
View developments and download
Public portfolio of my works and developments
Telegram for messages
@webitproff
Telegram channel
@s/aBuyFILE
  • Page published: 2026-06-06 23:22
  • Last update: 2026-08-22 12:27

Связанные статьи

Similar pages

Проверка прав пользователей "cot_auth()" в шаблонах Cotonti
1 Примеры использования cot_auth() в шаблонах Cotonti с разными масками прав (R, W, A, etc.) и с категориями тоже. Как
Баг в ядре Cotonti при проверки активности плагина с всего одним хуком
2 Баг в ядре Cotonti cot_plugin_active('КОД_ПЛАГИНА') возвращает false, если у плагина всего один хук. Хук при
Проверка владельца контента в Cotonti на PHP 8.5
3 Проверка владельца контента в Cotonti на PHP 8.5В Cotonti, управление доступом к контенту в зависимости от того,
Как изменить расположение папки с изображениями плагина Attach2
4 При оптимизации сайта возникают различные ситуации. Одной из них является смена расположения папки с картинками,
Список тегов и блоков в шаблонах Cotonti
5 Список доступных тегов и блоков в шаблоне на странице модуля или плагина. Документация, что происходит и как это