Баг в ядре Cotonti при проверки активности плагина с всего одним хуком

Простой и быстрый способ пофиксить проблему, если в бизнес-логике кода или в шаблоне, проверка активности плагина ложно возвращает false с однохуковыми плагинами.

Баг в ядре Cotonti 

cot_plugin_active('КОД_ПЛАГИНА') возвращает false, если у плагина всего один хук. 

Хук при этом исполняется, плагин работает, но проверки в шаблоне и в логике не срабатывают: 

<!-- IF {PHP|cot_plugin_active('nameplug')} -->
...
<!-- ENDIF -->
if (cot_plugin_active('nameplug')) {
    ...
}

Проблема воспроизводится именно с однохуковыми плагинами (global, standalone, header.main и т.п.).


Вариант первый — как пофиксить

Файл 1: system/extensions/ExtensionsService.php
Метод: isActive()
Строка:

return isset($cot_plugins_enabled[$extensionCode]);

Заменить на:

if (isset($cot_plugins_enabled[$extensionCode])) {
    return true;
}

$activeCount = (int) Cot::$db->query(
    'SELECT COUNT(*) FROM ' . Cot::$db->plugins . ' WHERE pl_code = :code AND pl_active = 1',
    ['code' => $extensionCode]
)->fetchColumn();

return $activeCount > 0;

Файл 2: system/extensions/ExtensionsControlService.php
Метод: hasActiveParts()
Строка:

return $activeCount > 1;

Заменить на:

return $activeCount > 0;

Либо вариант второй

Файл: system/functions.php
Функция: cot_plugin_active()

Сейчас там:

function cot_plugin_active($extensionCode)
{
    if (empty($extensionCode)) {
        return false;
    }
	return ExtensionsService::getInstance()->isPluginActive($extensionCode);
}

Заменить на:

function cot_plugin_active($extensionCode)
{
    if (empty($extensionCode)) {
        return false;
    }

    $activeCount = (int) Cot::$db->query(
        'SELECT COUNT(*) FROM ' . Cot::$db->plugins . ' WHERE pl_code = :code AND pl_active = 1',
        ['code' => $extensionCode]
    )->fetchColumn();

    return $activeCount > 0;
}

Почему это работает: cot_plugin_active() перестаёт зависеть от $cot_plugins_enabled (это массив из {core} по ct_state, там у treecatspage 0) и читает напрямую из {plugins} — из той же таблицы, из которой ядро берёт хук global и исполняет его. Раз хук исполняется, значит pl_active = 1 там есть, значит функция вернёт true.


третий способ без вмешательства в ядро.

создать дополнительный файл хука в плагине, что бы хуков было больше одного. 
например можно создать файл в корне папки плагина с именем:

 

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

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

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

Мультикатегории статьи

Дополнительные категории, в которых эта статья показывается как похожая.

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

webitproff

Онлайн

Sodium Carbonate

Последняя авторизация: 18.09.2026 19:04

Обо мне кратко
Поддержка и разработка веб-проектов на CMF Cotonti: приватные мессенджеры через сайт, открытые и закрытые небольшие социальные сети, торговые площадки и маркетплейсы, портал биржи фриланса и услуг, каталоги товаров оптовых поставщиков, дропшиппинг-платформы, интернет-магазины и многое другое.
Смотреть разработки и скачать
Публичное портфолио моих работ и разработок
Телеграм для сообщений
@webitproff
Телеграм-канал
@s/aBuyFILE
  • Страница размещена: 18.09.2026 17:34
  • Последнее обновление: 18.09.2026 18:39

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

Как устроена проверка активности плагина в шаблонах
1 Как устроена проверка активности плагина в шаблонахcot_plugin_active() вызывает ExtensionsService::isPluginActive(),
Баг в CKEditor из-за свойства box-sizing
2 До сих пор в CKEditor по странной причине не исправлен баг, из-за которого окно редактора "залезает" за
Памятка при обновлении. Документация по CMF Cotonti
3   Всегда перед обновлением делайте резервную копию вашего рабочего сайта. Еще лучше проверить процедуру обновления на
Hover или click что правильнее при создании навигации
4 Создание навигации для сайта – это этап важный как с точки зрения юзабилити, так и с точки зрения поисковой
Настройка плагина Mavatars на Cotonti
5 Mavatars - это универсальный плагин, который позволяет прикреплять к записям на сайте любые файлы, в том числе