RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

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

Вызов системных событий, собственная группа плагинов

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

Эта статья поможет вам лучше понять, что необходимо сделать чтобы получить собственный плагин. Большинство из них состоят только из одного файла, который несет в себе сам код. Но для правильной установки и работы необходимо добавить еще 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>admin@joomla.org</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>, каждый элемент которого будет новым аргументом.

Смотрите также:
Комментарии (8) Добавить комментарий
  • Tuzemec
    Tuzemec
    16 Марта 2012, 11:32
     ↑  0  ↓     ответ

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

    А вот как можно использовать плагин, действие плагина способом вставки в код определенной команды, типа: {имя_плагина} ???

    • Tuzemec
      Tuzemec
      16 Марта 2012, 11:34
       ↑  +7  ↓     ответ

      Есть RUководство как это реализовывается?

      • Денис
        Денис
        16 Марта 2012, 12:10
         ↑  0  ↓     ответ

        Получаем текст документа и в нем str_replace или preg_replace

        • Tuzemec
          Tuzemec
          16 Марта 2012, 15:48
           ↑  +5  ↓     ответ

          Блин. Начинающему прям понятно всё стало! )))

          Ну конечно же! А я то думаю откуда ветер дует и куда он так спешит. А оно то оказалось! В сторону правой коленки южно-американского дерева дуб кленового соцветия preg_replace! Всё пойду сдаваться санитарам! =))))

  • Oleg
    Oleg
    30 Августа 2012, 15:46
     ↑  0  ↓     ответ

    Не запускается и все тут. В чем отличия создания плагинов к joomla 2.5?

  • Кирилл
    Кирилл
    26 Декабря 2012, 21:57
     ↑  +2  ↓     ответ

    читал, но ни чего не понял, помогите

    function plg<PluginGroup><PluginName>( &$subject )

    1) не понял откуда берется значение $subject?

    2) как плагин знает когда ему сработать?

  • Andrey
    Andrey
    04 Августа 2014, 10:23
     ↑  0  ↓     ответ

    В общем потребовалось поработать с этим мамонтом версии 1.5

    Конкретно по статье: КГ/АМ

    Ничего не написано конкретного, на других сайтах есть гораздо более подробные инструкции.

  • Сергей
    Сергей
    13 Мая 2016, 13:17
     ↑  0  ↓     ответ

    Я научился делать плагины для Joomla 3 и сейчас продаю несколько плагинов , благодаря курсу "Создание расширений для Joomla скачал его здесь infosklad.org/threads/webformyself-joomla-professional-sozdanie-rasshirenij-dlja-joomla.16397/ очень рекомендую кто хочет заниматься разработкой плагинов и дополнений

Оставить комментарий




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.