Заметки о решаемых задачах АйТишников

Сделал - запиши. Нашёл - сохрани :)

Прошу прощения за рекламу на сайте. Я постарался сделать это максимально ненавязчиво и по минимуму. При чтении заинтересовавших вас статей она не будет вам мешать.
И если есть возможность поставить мой сайт в исключения у блокировщика рекламы, я буду очень признателен вам.

DokuWiki Error: Call to undefined function trigger_event() плагин Bootswrapper

DokuWiki Error: Call to undefined function trigger_event() плагин Bootswrapper

 

 

 

DokuWiki постоянно развивается, и с обновлениями меняется API для работы с событиями. Если вы используете плагины, такие как Bootstrap Wrapper Plugin, вам может понадобиться адаптировать код для совместимости с новыми версиями. В этой статье мы рассмотрим конкретный пример: замену устаревшего вызова trigger_event() в файле popup.php плагина Bootstrap Wrapper Plugin.

Bootstrap Wrapper Plugin добавляет поддержку Bootstrap компонентов в DokuWiki, включая обработку медиа-менеджера и попапов. В файле popup.php этого плагина есть код, который запускает событие для медиа-менеджера. Давайте разберёмся, где это происходит и как обновить код.


Где находится файл popup.php

Файл popup.php является частью Bootstrap Wrapper Plugin и обычно расположен в директории плагина:

  • Путь: lib/plugins/bootstrapwrapper/exe/popup.php
  • Если плагин установлен через менеджер плагинов DokuWiki, путь будет: [ваш_сайт]/lib/plugins/bootstrapwrapper/exe/popup.php.
  • В репозитории плагина на GitHub (например, в ветке для DokuWiki) этот файл можно найти в папке exe/popup.php внутри архива плагина.

Этот файл отвечает за обработку попапов и интеграцию с медиа-менеджером DokuWiki. В нём может быть код, который запускает событие 'MEDIAMANAGER_STARTED'.


Что менять: старый код и новый

В старых версиях плагина (или если код не обновлён) в popup.php используется функция trigger_event(). Вот пример того, как это может выглядеть:

Старый код в popup.php

<?php
// ... другой код плагина ...

$tmp = array();
// Старый вызов события
trigger_event('MEDIAMANAGER_STARTED', $tmp);
session_write_close();

// ... остальной код ...
?>

Этот код запускает событие 'MEDIAMANAGER_STARTED' и передаёт в него массив $tmp. Однако в новых версиях DokuWiki функция trigger_event() устарела и может не работать корректно.

Новый код: замена на Event::createAndTrigger()

Чтобы обновить код, замените старый вызов на новый API с классом Event. Вот как это сделать:

<?php
// ... другой код плагина ...

use dokuwiki\Extension\Event;  // Импорт класса Event

$tmp = array();
// Новый вызов события
Event::createAndTrigger('MEDIAMANAGER_STARTED', $tmp);
session_write_close();

// ... остальной код ...
?>

Или, если вы предпочитаете не использовать use, можно вызвать с полным пространством имён:

<?php
// ... другой код плагина ...

$tmp = array();
// Новый вызов события с полным именем класса
\dokuwiki\Extension\Event::createAndTrigger('MEDIAMANAGER_STARTED', $tmp);
session_write_close();

// ... остальной код ...
?>

Важные изменения:

  • Импорт класса: Добавьте use dokuwiki\Extension\Event; в начало файла (после <?php), чтобы PHP знал о классе. Если файл уже имеет другие use-выражения, добавьте эту строку к ним.
  • Замена функции: trigger_event('MEDIAMANAGER_STARTED', $tmp)Event::createAndTrigger('MEDIAMANAGER_STARTED', $tmp).
  • Параметры: Метод createAndTrigger() принимает те же параметры: имя события и данные (по ссылке). Если нужно, можно добавить третий параметр — действие по умолчанию (callable) и четвёртый — флаг отмены (bool, по умолчанию true).
  • Автозагрузка: Убедитесь, что автозагрузка DokuWiki работает (обычно это так в стандартной установке). Если класс не найдётся, проверьте, что плагин совместим с вашей версией DokuWiki.

  • Совместимость: Этот переход важен для DokuWiki версии 2020 и новее. Если плагин не обновлён, он может вызывать ошибки или предупреждения.
  • Резервная копия: Перед редактированием сделайте резервную копию файла popup.php, чтобы можно было откатить изменения.

Итог

Обновление Bootstrap Wrapper Plugin — простой процесс: найдите popup.php, замените trigger_event() на Event::createAndTrigger() и добавьте импорт класса. Это обеспечит совместимость с современными версиями DokuWiki и улучшит производительность.

 

02 сентября 2025, 16:41    Александр Linux 0    0 0

 

 

 

 



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

    Вы должны авторизоваться, чтобы оставлять комментарии.