Примеры использования плагинов

плагины joomla

Одной из запутанных вещей в плагинах является то, что они так сильно различаются между собой. И только одна деталь является общей для всех: вызов плагина. Давайте рассмотрим несколько примеров базовых плагинов Joomla и их вызов.
System: SEF

Нашим первым примеров будет SEF плагин. Это класс с именем plgSystemSef в файле plugins/system/sef/sef.php. Он позволяет Joomla использовать ЧПУ (человекопонятные УРЛ). Этот плагин сканирует HTML документ на наличие ссылок и преобразует их в человекопонятные ссылки. Он также заменяет относительные URL на полные URL для некоторых других типов ссылок.

Как он вызывается?

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

Если мы загружаем страницу с фронтенда нашего сайта, мы вызываем метод render() класса JSite (в файле includes/application.php). Почти в самом конце этого метода мы можем видеть следующий код:

1.
JPluginHelper::importPlugin('system');

Эта команда загружает в рабочую память все включенные системные плагины (если плагин выключен в Менеджере плагинов, то он не загружается). Когда классы системных плагинов загружены в рабочую память, то мы можем вызвать одно или более системных событий. Так как эти плагины по сути являются простыми объявлениями классов, мы пока не выполнили никакого кода. Далее в методе render() класса JSite мы на самом деле вызываем метод onAfterRender():

1.
// Trigger the onAfterRender event.
2.
$this->triggerEvent('onAfterRender');

Этот код вызывает событие onAfterRender(). Давайте проследим за кодом, чтобы разобраться, как это работает. Переменная $this является объектом класса JSite, поэтому $this->triggerEvent вызывает метод triggerEvent() класса JSite с одним параметром – строкой "OnAfterRender".

JSite расширяет класс JApplication. Так как у JSite нет своего собственного метода triggerEvent() (другими словами, он не переопределяет наследуемый от родительского класса метод), то он вызывает метод из JApplication:

1.
function triggerEvent($event, $args=null)
2.
{
3.
$dispatcher = JDispatcher::getInstance();
4.
return $dispatcher->trigger($event, $args);
5.
}

Этот код создает объект типа JDispatcher и затем вызывает метод trigger() этого объекта. Параметр $event установлен в значение "onAfterRender", а второй параметр $args установлен в значение по умолчанию "null", так как мы его не передавали.

Результатом этого является исполнение методов onAfterRender() каждого включенного плагина, который доступен в рабочей памяти. В данном случае поиск ограничен системными плагинами, потому что мы указали тип "system", когда вызывали importPlugin('system'), и именно поэтому в рабочую память были загружены только системные плагины.

Как правило, методы плагина должны соответствовать типу плагина. Например, мы должны использовать имена методов только системных событий в системных плагинах. Если мы будем следовать этому соглашению, то будет уже не важно, загружены ли в память другие типы плагинов, так как будут исполнены методы, которые совпадают с типом события.
Authentication: joomla

Этот плагин срабатывает тогда, когда пользователь авторизуется на сайте. Он проверяет, валидны ли имя пользователя и пароль. Это один из трех базовых плагинов аутентификации, которые включены в дистрибутив Joomla. По умолчанию, для проверки Joomla пользователей используется именно этот плагин.

Плагин находится в файле plugins/authentication/joomla/joomla.php и имя его класса plgAuthenticationJoomla.

Как он вызывается?

Когда пользователь делает попытку авторизоваться на сайте, исполняется метод authenticate() класса JAuthentication. В этом методе мы видим уже ожидаемую строку кода:

1.
$plugins = JPluginHelper::getPlugin('authentication');


Источник: http://joomlablog.ru

Добавить комментарий:
Имя:
E-mail:
2021 © Обсуждение Joomla и других CMS-систем управления сайтами  Правила | О проекте | Обратная связь