Joomla 1.5: Система событий.

Joomla 1.5: Использование Ajax

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

Основная идея в том, что один или более "наблюдателей" ( или "слушателей" ) регистрируют себя в системе, для какого — нибудь события. Во время определённого момента времени, приложение "коммуникатор" ( это может быть компонент, модуль или плагин) запускает событие, передавая некоторую информацию всем наблюдателям, подписавшимся на него. Наблюдатели могут взаимодействовать с информацией, передаваемой им, и даже возвращать какой — нибудь результат коммуникатору.

Joomla 1.5 Реализации Наблюдателя

Шаблон Observer реализуется в Joomla1.5 на глобальном уровне: через классы JPlugin (Observer) и JDispatcher (Observable). Если мы хотим работать со своими событиями, то нам нужно создать плагин, который расширит класс JPlugin. Подклассы JPlugin автоматически регистрируют себя в глобальном классе JDispatcher, во время подгрузки их категории (подробнее об этом позже). В качестве механизма диспетчеризации используется класс JDispatcher, который получает события от коммуникаторов и передает их слушателям.

Цель Коммуникаторов

Представим такую ситуёвину, скажем, у Вас есть компонент — библиотека компакт-дисков(CD). И тут Вас озаряет: что неплохо бы сообщать пользователям, когда кто то добавляет в библиотеку новый CD. Глядишь посещалка подымется. В этом случае мы можем описать своё событие, например: onCdAddedToLibrary, и в нужное время, "инициировать" его. Все плагины, которые "подписаны" на это событие сразу же получат извещение и нужную информацию, и смогут обработать её требуемым образом — например запустить почтовую рассылку уведомлений, что у вас появились новые фильмы.

Реализация Коммуникаторов

Так как вся диспетчеризация реализована на уровне ядра Joomla, то будет легко реализовать коммуникатор. Фактически, это — всего лишь вопрос загрузки определенной группы плагинов и запроса триггерного метода класса JDispatcher.

Есть один момент — плагины управляются на групповом уровне, группа плагина определяется в XML — файле установки. Есть восемь предопределенных групп, и каждая группа обрабатывает определённый набор задач.

Например, есть "поисковая" группа, которая предназначается, чтобы обрабатывать события поиска, и "пользовательская" группа плагинов для обработки событий пользователя, такие, как добавление и удаление пользователей Joomla. Эти группы загружаются коммуникатором, только тогда, когда они необходимы. Таким образом, Вы можете создать свою собственную группу и назвать ее так, как Вы хотите.А Ваш компонент должен определить, всех слушателей, которые будут знать, к какой группе и событиям они должны прислушиваться.

Как Инициировать События

Подходим к самому интересному: как инициировать события, что бы наши плагины могли реагировать на них? — Первая вещь, которую нужно сделать, это загрузить группу события:

JPluginHelper::importPlugin( 'myplugingroup' );

Это загрузит все подключенные плагины, которые определены как часть Вашей группы. Следующее, что нужно сделать — получить экземпляр класса JDispatcher:

$dispatcher =& JDispatcher::getInstance();

Здесь пара нюансов: Во-первых, чтобы создать новый экземпляр мы используем метод getInstance(), а не оператор "new". Это — метод корректного получения объекта класса JDispatcher ( здесь речь идёт о реализации классом JDispatcher — шаблона Singleton ), который содержит список всех доступных плагинов. Во-вторых, мы используем конструкцию =&, для получения значения по ссылке. Это приемлемо только для версии PHP <= 4!

Затем, мы должны инициировать наше собственное событие:

$results = $dispatcher->trigger( 'onCdAddedToLibrary', array( &$artist, & Joomla 1.5: Система событий. ) );

Здесь мы инициировали событие 'onCdAddedToLibrary' и передали слушателям события параметр — массив, содержащий именя исполнителя и название дорожки. Все плагины получат эти параметры, и смогут обработать их.

Минусы реализации.

Минус триггерного метода состоит в том, что он не определяет, какая группа плагинов должна быть уведомлена о событии. Как следствие уведомляются все плагины, которые были загружены на момент события, независимо от группы, в которой они находятся. Поэтому важно удостовериться, что имя Вашего события не конфликтует с именем события никакой другой группы плагинов. Обычно это не проблема, потому что группу плагинов загружает Ваш компонент (коммуникитор), таким образом, Вы знаете, какая группа загружена. Однако имейте в виду, что "системная" группа плагинов загружается довольно близко к началу запроса. Удостоверьтесь, что у Вас нет никаких конфликтов имен событий с системными событиями.

 

Возможно Вас заинтересуют эти материалы

Joomla 1.5: Отправка почты.

В этой заметке рассказано о том, как отправлять почту, используя механизмы предоставленные Joomla 1.5 (

Joomla 1.5: Пагинация.

Класс JPagination, представленный в Joomla! 1.5, позволяет легко, и просто добавлять постраничную навигацию - пагинацию

Joomla 1.5: Использование Ajax

В данной заметке вы узнаете, о том как разработать простое Ajax взаимодействие с использованием MooTools