Практически в любом фреймворке есть такое понятие, как системные события (event’ы, триггеры, хуки, ловушки). В Joomla они оформлены как плагины, а в классической литературе это добро обычно называют Observer или слушатель.
Смысл в следующем. В разных местах кода расставлены вызовы событий, например, после удаления любого материала будет вызвано событие item:deleted. Все функции, которые подключены к этому событию, будут выполнены в порядке подключения. Таким образом, будут удалены зависимости от материала, такие как картинки или записи в базе данных.
Как это работает?
В рамках Zoo все выполнено довольно в упрощенном варианте (собственно как и во всей Joomla) и собрано все в единственном хелпере event.
Создаем и подключаем класс события. Далее:
$event = $this->app->event; $dispatcher = $event->dispatcher; // производим регистрацию своего класса $event->register('MyEventClass'); // подключаемся к событию $dispatcher->connect('myevent:function', array('MyEventClass', 'handler'));
Если вы решили сделать собственное событие, то все также, только в нужный момент не забывайте вызывать нотификацию диспетчера.
$dispatcher->notify($event->create($var, 'myevent:function', array( /* ассоц массив с доп параметрами */))); // $var - основной объект события
Пример простейшего класса для обработки событий
// Класс нужно подключить вручную class MyEventClass { /** * Simple event handler * @param AppEvent $event */ public static function handler($event) { $app = App::getInstance('zoo'); // не забываем, что это статический метод, где нет $this $subject = $event->getSubject(); // получаем объект события $params = $event->getParameters(); // получаем доп параметры } }
Существующие события системы
JBZoo регистрирует классы «пустышки» для удобства расширения функционала. Их можно найти тут — /media/zoo/applications/jbuniversal/framework/events/jbevent.*.php
. Заодно так можно узнать, какие события есть в системе.
Важно понимать что:
Вы можете обратиться на наш специальный форум техподдержки JBZoo. Если у вас нет активного аккаунта со знаком «плюс» в тарифном плане, то вы можете задать свой вопрос в одном из этих разделов или на любой из наших контактов. Форум специально предназначен для JBZoo, приоритет и скорость ответа там выше.