Печать

Создание произвольного плагина

Плагины можно применять не только для обработки системных событий, но и просто для расширения функционала собственного компонента - что-то вроде расширений к расширениям.

Эта статья поможет вам лучше понять, что необходимо сделать чтобы получить собственный плагин. Большинство из них состоят только из одного файла, который несет в себе сам код. Но для правильной установки и работы необходимо добавить еще XML-файл, который будет описывать процесс установки, мета данные и параметры. 

Создание установочного файла

Как и для любых других расширений Joomla, установочный файл - это архив *.zip или *.tar.gz. В любом случае в архиве должен быть валидный XML, иначе установка будет не возможна. Ниже можно увидеть пример этого файла для поискового плагина 

<?xml version="1.0" encoding="iso-8859-1"?>
<install version="1.5" type="plugin" method="upgrade" group="search">
    <name>Categories searchbot</name>
    <author>Joomla! Project</author>
    <creationDate>November 2005</creationDate>
    <copyright>(C) 2005 Open Source Matters. All rights reserved.</copyright>
    <license>GNU/GPL</license>
    <authorEmail>Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.</authorEmail>
    <authorUrl>www.joomla.org</authorUrl>
    <version>1.1</version>
    <description>Allows searching of Categories information</description>
    
    <files>
        <filename plugin="categories.searchbot">categories.searchbot.php</filename>
    </files>
    
    <params>
        <param name="search_limit" type="text" size="5" default="50" label="Search Limit" description="Number of search items to return"/>        
    </params>
</install>

К важным моментам тут относятся

  • group="search"
    Группа к которой принадлежит плагин. Она совпадает с названием директории, где будет располагаться файл. Например для поисковых плагинов будет использовать "<siteroot>/plugins/search".
  • <files><filename /><filename /></files>
    Список файлов, которые будут скопированы при установки.
  • <params>
    Параметры, который будут доступны при настройке плагина.
  • method="upgrade"
    Параметр в теге <install> явно указывает что при установке не нужно удалять старые файлы, а только переписать их новыми из архива.

Остальные свойства очевидны.

Стоит заметить, что  ваш плагин должен содержать только уникальные функции и классы, чтобы избежать конфликтов с другими частями системы.

Если ваш плагин не использует функционал из существующих категорий, то укажите собственную группу. Во избежание ошибок, перед установкой, создайте необходимую категорию, например так

<siteroot>/plugins/mypugins 

Исполняемый код

Joomla использует для реализации паттерн Наблюдатель (Observer). Лучше придерживаться именно такой реализации.

// запрет прямого доступа
defined( '_JEXEC' ) or die( 'Restricted access' );
// Импортируем зависимую библиотеку
jimport('joomla.plugin.plugin');
class plg<PluginGroup><PluginName> extends JPlugin
{
    /**
     * Конструктор класса
     */
    function plg<PluginGroup><PluginName>( &$subject )
    {
        // обязательно необходимо вызвать родительский конструктор
        parent::__construct( $subject );
        // загрузка параметров плагина
        $this->_plugin = JPluginHelper::getPlugin( '<GroupName>', '<PluginName>' );
        $this->_params = new JParameter( $this->_plugin->params );
    }
    
    /**
     * Методы плагина - это события, которые будут вызываться автоматически.
     */
    function <EventName>()
    {
        // Код плагина
        return true;
    }
}

 

Используем плагин в своем коде

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

Произвольный вызов события плагинов выглядит следующим образом

JPluginHelper::importPlugin('<PluginGroup>');
$dispatcher =& JDispatcher::getInstance();
$results = $dispatcher->trigger( '<EventName>', <ParameterArray> );

Массив параметров отправлять не обязательно. После выполнения этого кода, все активные плагины выбираются из общего списка, выстраиваются в порядке приоритета (он выбирается в панели управления, Менеджер плагинов, столбец "порядок") и в каждом из них вызывается метод имя которого совпадает с названием события. Метод в виде аргументов получит массив <ParameterArray>, каждый элемент которого будет новым аргументом.

Интересная статья? Поделись ей с другими: