Баг в ядре 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.


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

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

<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=footer.main
[END_COT_EXT]
==================== */

defined('COT_CODE') or die('Wrong URL.');

зайти в админку, обновить плагин. 
 теперь проверки
 

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

должны возdращать true

2 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.

Content author

webitproff

Online

Sodium Carbonate

Last logged: 2026-09-18 19:31

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-09-18 17:34
  • Last update: 2026-09-18 19:28

Similar pages

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