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

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

  • tinyurl.com
    tinyurl.com
    26 Марта 2022, 15:09
     ↑  0  ↓     ответ

    My partner and I stumbled over here by a different page and thought I may as well check things out.

    I like what I see so now i'm following you. Look forward to

    looking over your web page again.

  • http://tinyurl.com
    http://tinyurl.com
    27 Марта 2022, 14:08
     ↑  0  ↓     ответ

    You are so interesting! I don't think I've read a single

    thing like that before. So nice to discover someone with a few original thoughts on this

    topic. Really.. thank you for starting this up. This web site is one thing

    that's needed on the internet, someone with a little

    originality!

  • http://tinyurl.com/ycb5up9z
    http://tinyurl.com/ycb5up9z
    28 Марта 2022, 08:40
     ↑  0  ↓     ответ

    Hello everybody, here every one is sharing these know-how, thus it's fastidious to read

    this web site, and I used to visit this web site all

    the time.

  • tinyurl.com
    tinyurl.com
    28 Марта 2022, 15:03
     ↑  0  ↓     ответ

    I simply couldn't leave your web site prior to suggesting that I extremely enjoyed the usual information a person supply for your guests?

    Is going to be again frequently in order to check up on new posts

  • tinyurl.com
    tinyurl.com
    28 Марта 2022, 22:56
     ↑  0  ↓     ответ

    Having read this I thought it was very informative. I

    appreciate you finding the time and effort to put this

    content together. I once again find myself personally spending a significant amount

    of time both reading and leaving comments. But so what, it was still worth it!

  • cheap flights
    cheap flights
    02 Апреля 2022, 20:23
     ↑  0  ↓     ответ

    Whoa! This blog looks exactly like my old one! It's on a entirely different subject but it

    has pretty much the same layout and design. Superb choice of colors!

  • cheapest flights
    cheapest flights
    03 Апреля 2022, 18:54
     ↑  0  ↓     ответ

    Nice post. I was checking constantly this weblog

    and I am impressed! Very useful information particularly the remaining part :) I deal

    with such info a lot. I used to be seeking this particular

    information for a very lengthy time. Thanks and good luck.

  • cheapest airfare possible
    cheapest airfare possible
    04 Апреля 2022, 23:43
     ↑  0  ↓     ответ

    What's up to every body, it's my first pay

    a visit of this webpage; this web site consists of amazing and really good material designed

    for visitors.

  • flight search
    flight search
    05 Апреля 2022, 05:17
     ↑  0  ↓     ответ

    I'm gone to tell my little brother, that he should also pay a visit this blog on regular

    basis to obtain updated from latest information.

  • discount airline tickets
    discount airline tickets
    06 Апреля 2022, 08:32
     ↑  0  ↓     ответ

    Wonderful article! This is the type of info that should be shared around

    the internet. Shame on the seek engines for now not positioning this put up

    higher! Come on over and discuss with my site .

    Thank you =)

  • discount airline tickets
    discount airline tickets
    06 Апреля 2022, 19:09
     ↑  0  ↓     ответ

    I was suggested this website by my cousin. I am not sure whether this post is written by him as nobody else know such

    detailed about my difficulty. You're incredible!

    Thanks!

  • gamefly
    gamefly
    07 Апреля 2022, 06:37
     ↑  0  ↓     ответ

    Good way of explaining, and good article to take information concerning my presentation focus, which i am going to present in institution of higher education.

  • gamefly
    gamefly
    11 Апреля 2022, 01:35
     ↑  0  ↓     ответ

    I pay a quick visit each day a few web sites and blogs to read posts, but this

    blog presents feature based articles.

  • tinyurl.com
    tinyurl.com
    10 Мая 2022, 09:03
     ↑  0  ↓     ответ

    I'm not sure where you are getting your info, but great topic.

    I needs to spend some time learning much more or understanding more.

    Thanks for magnificent information I was looking for this

    info for my mission.

  • tinyurl.com
    tinyurl.com
    11 Мая 2022, 17:23
     ↑  0  ↓     ответ

    Thanks in favor of sharing such a fastidious thinking, post is nice,

    thats why i have read it entirely

  • tinyurl.com
    tinyurl.com
    17 Мая 2022, 00:00
     ↑  0  ↓     ответ

    You actually make it seem really easy together with

    your presentation but I find this matter to be really something which I believe I might never understand.

    It sort of feels too complicated and extremely large for me.

    I am taking a look forward in your subsequent put up, I'll

    try to get the grasp of it!

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




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

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