Практически в любом фреймворке есть такое понятие, как системные события (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, приоритет и скорость ответа там выше.