Pages, Articles & News
Tools & Plugins
Example / Placeholder Title


Description as an example placeholder. Sample text content for further customization of the "Index36" template.

You are free to edit and customize the template however you like. If you don’t have time or enough knowledge — you can always order template adaptation by contacting me via GitHub or private messages on the digital goods marketplace.

2025-01-29 22:51

Если вы с репозитория обновили свой сайт, до актуальной версии 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
}

 

Пояснение:

  1. global $cot_plugins_enabled;
    Подключается глобальная переменная $cot_plugins_enabled, которая содержит список активных плагинов. Если переменная не подключена, функция не сможет проверить активность плагина.

  2. is_array($cot_plugins_enabled)
    Проверяет, что $cot_plugins_enabled является массивом. Это нужно, чтобы избежать ошибок, если переменная была определена, но не инициализирована как массив.

  3. isset($cot_plugins_enabled[$name])
    Проверяет, существует ли элемент с ключом $name в массиве $cot_plugins_enabled. Ключ $name соответствует имени плагина, который мы проверяем на активность.

  4. Возвращаемое значение
    Если оба условия выполняются (переменная является массивом и плагин существует в массиве активных плагинов), функция возвращает 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) и тип расширения (плагин)
}

Пояснения:

  1. if (empty($extensionCode))
    Проверяется, задан ли код плагина ($extensionCode). Если он пустой, функция сразу возвращает false, так как проверка на активность невозможна без корректного кода плагина.

  2. ExtensionsService::getInstance()
    Это вызов метода для получения объекта-одиночки (singleton) класса ExtensionsService. Такой подход обеспечивает единый экземпляр службы для управления расширениями (модулями и плагинами).

  3. ->isActive($extensionCode, ExtensionsDictionary::TYPE_PLUGIN)
    Метод isActive проверяет, активен ли указанный плагин. Передаются два аргумента:

    • $extensionCode — код плагина.
    • ExtensionsDictionary::TYPE_PLUGIN — тип расширения (в данном случае, плагин). Константа TYPE_PLUGIN указывает, что проверяется именно плагин, а не модуль.

Итог:

Эта функция более универсальна, так как делегирует проверку на активность службы расширений. Она работает корректно, если структура приложения поддерживает классы ExtensionsService и ExtensionsDictionary.

 

 

This post was edited by webitproff (2025-03-09 23:21, 1 year ago)
Account