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>, каждый элемент которого будет новым аргументом.

Смотрите также:
Комментарии (17) Добавить комментарий
  • 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
     ↑  +3  ↓     ответ

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

    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/ очень рекомендую кто хочет заниматься разработкой плагинов и дополнений

    • Серега, друг
      Серега, друг
      25 Мая 2018, 18:12
       ↑  0  ↓     ответ

      Нашел видео-курс этого автора на торренте, бесплатно.

  • priamax website
    priamax website
    11 Мая 2017, 00:21
     ↑  0  ↓     ответ

    I do not even know how I ended up here, but I thought this post was great.

    I do not know who you are but definitely you are going to a famous blogger if

    you aren't already ;) Cheers!

  • http://priamaxpills.org/
    http://priamaxpills.org/
    11 Мая 2017, 00:28
     ↑  0  ↓     ответ

    Thank you for helping out, great information.

  • coconut oil or
    coconut oil or
    25 Ноября 2019, 14:18
     ↑  0  ↓     ответ

    Simply want to say your article is as amazing. The clearness in your publish is just excellent and that i can think you are knowledgeable on this subject.

    Well with your permission allow me to grasp your RSS feed to stay up to date

    with drawing close post. Thanks a million and please keep up the enjoyable work.

  • plenty of fish dating site
    plenty of fish dating site
    26 Ноября 2019, 11:35
     ↑  0  ↓     ответ

    What's up Dear, are you in fact visiting this website daily, if so then you will without doubt obtain pleasant knowledge.

  • Antoinette
    Antoinette
    23 Февраля 2021, 00:18
     ↑  0  ↓     ответ

    I was curious if you ever considered changing

    the page layout of your site? Its very well written; I love what youve got to say.

    But maybe you could a little more in the way

    of content so people could connect with it better. Youve got an awful

    lot of text for only having one or two images.

    Maybe you could space it out better?

  • Dwight
    Dwight
    09 Марта 2021, 13:56
     ↑  0  ↓     ответ

    Great information. Lucky me I came across your blog by chance (stumbleupon).

    I've saved it for later!

  • wpfikds
    wpfikds
    22 Мая 2021, 18:26
     ↑  0  ↓     ответ

    Создание произвольного плагина / Создание плагинов .:. Документация Joomla! CMS

    [url= gw631z10s5bp33be779jj7qietu118h2s.org/ ]uwpfikds[/url]

    <a href="/ gw631z10s5bp33be779jj7qietu118h2s.org/ ">awpfikds</a>

    wpfikds gw631z10s5bp33be779jj7qietu118h2s.org/

  • http://maps.google.com.bd/url?sa=t&url=http://www.whatsmycarworth.co.uk/
    http://maps.google.com.bd/url?sa=t&url=http://www.whatsmycarworth.co.uk/
    03 Сентября 2021, 23:42
     ↑  0  ↓     ответ

    ?i! I know thіs is somewhаt off topic ?ut І ?as wondering which blg platfortm arе you using

    for this site? ?'m gettіng sick aand tired ?f Wordpress be?ause I'v? haad ?roblems

    with hackers ?nd I'm ?ooking аt options foг another platform.

    І wuld be fantastic if you cou?d ?oint mе inn t?? direction of a go?d platform.

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




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

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