Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Управление событиями

Модули и их составляющие на разных этапах своей работы инициируют события.

Событие - сигнал системы, о том, что что-то произошло.

События Amiro.CMS имеют имя (что произошло), параметры (при каких условиях это произошло), и соответствующее имя модуля (где это произошло).

Для того, чтобы обработать некоторое событие, необходимо зарегистрировать обработчик события с использованием метода AMI_Event::addHandler, указав на какое событие какого модуля он должен отреагировать.

AMI_Event::addHandler('EVENT_NAME', $callback, $moduleId);

$callback - это имя функции, либо массив содержащий объект и имя метода обработки события.

Функция/метод обработки сбытия обязана принимать следующие параметры:

function handlerName($eventName, $aEvent, $handlerModId, $srcModId);

Где:

  • $eventName - имя события
  • $aEvent - массив данных события
  • $handlerModId - имя модуля для которого вызвана обработка события
  • $srcModId - имя модуля, инициатора события

Если одному событию назначено несколько обработчиков, они будут вызываться поочередно, в том порядке, в каком они были добавлены в коде.

Для того чтобы передать параметры в дальнейшую цепочку событий, необходимо в обработчике события вернуть массив входящих параметров $aEvent. Возвращаемые результаты необходимо добавить в данный возвращаемый параметр.

Для того чтобы остановить дальнейшее выполнение цепочки событий, необходимо в качестве элемента массива вернуть

$aEvent['_break_event'] = true;

Используя обработчики событий, возможно контролировать процесс работы модулей без внесения изменений в исходный код самих модулей.

Пример

С данным обработчиком события сохранения модели элемента, модуль "Новости" будет при сохранении приводить заголовки новостей к верхнему регистру.

AMI_Event::addHandler('on_before_save_model_item', 'handleSaveNewsItem', 'news');
 
function handleSaveNewsItem($name, array $aEvent, $handlerModId, $srcModId){
    if(isset($aEvent['aData']['header'])){
        $aEvent['aData']['header'] = strtoupper($aEvent['aData']['header']);
    }
    return $aEvent;
}

Обработчики событий любых модулей можно размещать в файле _local/common_functions.php

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

Полный список событий Amiro.CMS доступен на странице API Reference.

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2021 © Amiro.CMS Все права защищены.