Если вы с репозитория обновили свой сайт, до актуальной версии Cotonti 0.9.26 beta и у вас "слетело" отображение некоторых расширений, их блоков или ссылок на них, то проблема может быть в следующем:
возьмем например плагин "whosonline", если раньше ссылку выводили примерно так:
<!-- IF {PHP.cot_plugins_active.whosonline} -->
<li>
<a class="uk-link-muted" href="{PHP|cot_url('whosonline')}">
<span class="uk-margin-small-x uk-light">
<i class="fa-solid fa-earth-americas fa-xl"></i>
</span>
<span class="uk-text-middle">{PHP.L.WhosOnline}</span>
</a>
</li>
<!-- ENDIF -->
то теперь нужно так:
<!-- IF {PHP|cot_plugin_active('whosonline')} -->
<li>
<a class="uk-link-muted" href="{PHP|cot_url('whosonline')}">
<span class="uk-margin-small-x uk-light">
<i class="fa-solid fa-earth-americas fa-xl"></i>
</span>
<span class="uk-text-middle">{PHP.L.WhosOnline}</span>
</a>
</li>
<!-- ENDIF -->
Внимание стоит обратить именно на первую строку в обоих участках кода, а именно, раньше проверку условия мы использовали при помощи записи конструкции вида
{PHP.cot_plugins_active.namePlugin}
где namePlugin - это название плагина, которое всегда соответсвует названию папки этого плагина.
Обратите внимание на {PHP.cot_ и {PHP|cot_
{PHP.cot_ - вызываем переменную, в данном случае глобальную.
{PHP|cot_ - вызаваем функцию, в данном случает также в глобальной видимости
То есть изменился способ проверки, установлен ли плагин, чтобы отдать код, который внутри условия.
Решение за 10 секунд
Если раньше использовали конструкцию вида
<!-- IF {PHP.cot_plugins_active.whosonline} -->
то сейчас используем такую
<!-- IF {PHP|cot_plugin_active('whosonline')} -->
Название плагина помещаем в одинарные кавычки, обрамляем круглыми скобками, и после PHP, вместо точки, ставим вертикальную черту.
Для тех кто хочет знать больше - можно почитать ниже
Это старая функция и её код
/**
* Проверяет, установлен ли плагин и активен ли он в текущий момент
*
* @global array $cot_plugins_enabled Реестр активированных плагинов
* @param string $name Имя плагина
* @return bool Возвращает true, если плагин активен, иначе false
*/
function cot_plugin_active($name)
{
global $cot_plugins_enabled; // Подключаем глобальную переменную $cot_plugins_enabled, содержащую данные об активных плагинах
// Проверяем, является ли $cot_plugins_enabled массивом и существует ли в нем элемент с ключом $name
return is_array($cot_plugins_enabled) && isset($cot_plugins_enabled[$name]);
// Если $cot_plugins_enabled - массив и в нем есть элемент с ключом $name, возвращаем true, иначе false
}
Пояснение:
-
global $cot_plugins_enabled;
Подключается глобальная переменная$cot_plugins_enabled, которая содержит список активных плагинов. Если переменная не подключена, функция не сможет проверить активность плагина. -
is_array($cot_plugins_enabled)
Проверяет, что$cot_plugins_enabledявляется массивом. Это нужно, чтобы избежать ошибок, если переменная была определена, но не инициализирована как массив. -
isset($cot_plugins_enabled[$name])
Проверяет, существует ли элемент с ключом$nameв массиве$cot_plugins_enabled. Ключ$nameсоответствует имени плагина, который мы проверяем на активность. -
Возвращаемое значение
Если оба условия выполняются (переменная является массивом и плагин существует в массиве активных плагинов), функция возвращаетtrue. В противном случае —false.
Эта функция проста, но устарела в версии 0.9.26.
Использовалась для проверки, активирован ли конкретный плагин в системе Cotonti.
Это новая функция и её код
/**
* Проверяет, установлен ли плагин и активен ли он в текущий момент
*
* @param string $extensionCode Код плагина
* @return bool Возвращает true, если плагин активен, иначе false
*/
function cot_plugin_active($extensionCode)
{
// Проверяем, что код плагина не пустой
if (empty($extensionCode)) { // Если переменная $extensionCode пуста
return false; // Возвращаем false, так как код плагина отсутствует
}
// Получаем экземпляр сервиса расширений и проверяем, активен ли плагин
return ExtensionsService::getInstance() // Получаем объект-одиночку ExtensionsService
->isActive($extensionCode, ExtensionsDictionary::TYPE_PLUGIN);
// Вызываем метод isActive, передавая код плагина ($extensionCode) и тип расширения (плагин)
}
Пояснения:
-
if (empty($extensionCode))
Проверяется, задан ли код плагина ($extensionCode). Если он пустой, функция сразу возвращаетfalse, так как проверка на активность невозможна без корректного кода плагина. -
ExtensionsService::getInstance()
Это вызов метода для получения объекта-одиночки (singleton) классаExtensionsService. Такой подход обеспечивает единый экземпляр службы для управления расширениями (модулями и плагинами). -
->isActive($extensionCode, ExtensionsDictionary::TYPE_PLUGIN)
МетодisActiveпроверяет, активен ли указанный плагин. Передаются два аргумента:$extensionCode— код плагина.ExtensionsDictionary::TYPE_PLUGIN— тип расширения (в данном случае, плагин). КонстантаTYPE_PLUGINуказывает, что проверяется именно плагин, а не модуль.
Итог:
Эта функция более универсальна, так как делегирует проверку на активность службы расширений. Она работает корректно, если структура приложения поддерживает классы ExtensionsService и ExtensionsDictionary.