UniversalEventBus

Компонент для отправки серверных событий на фронт и событий фронта на сервер.
Версия 1.2.1-pl
Дата выпуска 13.09.2025
Загрузки 7
Просмотры 1 204
Внимание, этот компонент несовместим с MODX 3.
Как пользоваться:
1. Создать в админке плагин с любым именем и подключить его к нужным событиям.
use UniversalEventBus\Services\EventBus;

$basePath = $modx->getOption('base_path', null, $_SERVER['DOCUMENT_ROOT'] . '/');
require_once $basePath . 'core/components/universaleventbus/services/vendor/autoload.php';

$eventBus = new EventBus($modx);
$eventBus->sendEvent($modx->event->name);

2. В JavaScript нужно ловить событие «eventbus» и в обработчике выполнять необходимое действие.
document.addEventListener('eventbus', (event) => {
    console.log(event.detail.data);
});

3. Вы можете передавать на сервер информацию о браузерных событиях. Например, для передачи на сервер информации о клике по ссылке
<a href="{$uri}" data-ueb-event="click" data-ueb-once="1" data-ueb-params="rid:{$id};eventName:productClick">{$menutitle}</a>
Атрибут data-ueb-once указывает на то, что событие будет отправлено только один раз.

Доступны нестандартные значения для атрибута data-ueb-event:
— close/open — установите его элементам которые должны закрыться/открыться
— show/hide — установите его элементам которые должны появляться/исчезать (например при скролле)
При использовании событий close/open у целевых элементов должны меняться классы отвечающие за показ/скрытие
и эти классы надо перечислить в системных настройках.

В атрибуте data-ueb-params можно указать произвольные параметры, которые будут переданы в событие на сервер.

4. Вы можете добавить обработчик события eventbus:before:send и добавить любые данные для передачи на сервер
document.addEventListener('eventbus:before:send', (event) => {
       const {target, params} = event.detail;
       if(target.id === '#product-1') {
            params.append('product_id', 1);
       }
    });

Системные события:
— OnUebInit (после инициализации компонента): $EventBus
— OnBeforeUebHandleEvent (перед получением данные и добавления в очередь): $EventBus, $dispatch
— OnUebHandleEvent (после получения данных, но перед добавлением в очередь): $output, $EventBus
— OnUebGetProductsData (получение данных о товаре): $product, $EventBus.
— OnGetUebWebConfig (получение конфигурации фронтенда): $webConfig, $EventBus.

Вы можете отменить добавление события в очередь в плагине: $EventBus->dispatch = false.
Вы можете изменить данные перед отправкой в очередь в плагине: $EventBus->output = [];
Вы можете изменить данные товара в плагине: $EventBus->product = [];
Вы можете изменить конфигурации фронтенда в плагине: $EventBus->webConfig = [];
Вы можете изменить получателя в плагине: $EventBus->branch = 'branch_name';
Вы можете изменить получателя при инициализации: $EventBus = new EventBus($modx, ['branch' => 'branch_name']);

Для того, чтобы в данных была информация о модификациях, нужно передать на сервер id модификации в параметре mid
или опции в параметре options, по которым можно получить модификацию.

1.2.1-pl

  • Добавил возможность явно передать контекст в метод handleEvent().

1.2.0-pl

  • Мелкие правки.

1.2.0-beta7

  • Изменил логику смены контекста.
  • Добавил систему гарантированной доставки сообщений.
  • Добавил в ответ при отправке браузерного события информацию о добавлении события в очередь.
  • Оптимизировал работу компонент при нескольких открытых вкладках.
  • Поменял доступность свойства EventBus::contextCookieName.

1.2.0-beta6

  • Поместил создание экземпляра класса EventBus в метод обработчик события DOMContentLoaded.

1.2.0-beta5

  • Сделал свойство EventBus::isBot публичным.

1.2.0-beta4

  • Исправил ошибку в методе execute() при возврате строки.
  • Добавил возможность передавать в менеджер очередей опции при добавлении элемента в очередь.

1.2.0-beta3

  • Исправил получение данных о конкретном элементе корзины.

1.2.0-beta2

  • Добавил возможность транслитерации полей товара в orderData.
  • Изменил обработку открытий и закрытий элементов.

1.2.0-beta

  • Добавил возможность транслитерации полей товара в productsData.
  • Добавил получение данных модификации при использовании msOptionsPrice2.

1.1.0-beta4

  • Мелкие правки.

1.1.0-beta3

  • Добавил возможность использовать методы execute() и getSQL().
  • Добавил возможность определять страницу по переданному в параметрах uri.

1.1.0-beta2

  • Добавил возможность пересылать сообщения между пользователями.
  • Добавил возможность программно отправлять события на сервер.

1.1.0-beta

  • Добавил отправку браузерных событий на сервер.

1.0.0-beta2

  • Добавил ESLint.
  • Добавил информацию о корзине.
  • Поменял приоритет для события OnLoadWebDocument.
  • Убрал любые манипуляции с данными на фронтенде.

1.0.0-beta

  • Первая сборка.

Последние обсуждения в сообществе MODX.pro