Joomla 1.5 Инициализируем собственные события. Или как заставить работать плагины в собственных компонентах.

Тема в разделе "Программирование", создана пользователем omfgpanda, 03.08.2010.

  1. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Добрый день, уважаемые и не сильно уважаемые пользователи форума )

    Сегодня речь пойдет об инициализации собственных событий в собственных компонентах для использования собственных плагинов, да и не только )))

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

    1. Инициализируем собственное событие.

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

    Все наши манипуляции (инициализации) мы будем реализовывать в файле модели - компонента.

    Рекомендую все плагины для компонентов закидывать в группу "System". С ней сегодня и будем работать. Подключаем группу:
    Код (PHP):
    1. JPluginHelper::importPlugin( 'system' );

    Данный код "подтянет" все включенные плагины в группе "System". Для высоко нагруженных решений рекомендую подключать только нужные плагины:
    Код (PHP):
    1. JPluginHelper::importPlugin( 'system', 'MyPluginName' );


    Инициализируем диспатчер:
    Код (PHP):
    1. $dispatcher =& JDispatcher::getInstance();

    JDispatcher - это класс для работы с событиями. Соответственно объект $dispatcher позволит нам производить нужные нам манипуляции.

    Допустим, что в переменной $content храниться весь текст, который выведет наш компонент. И в этом тексте есть куски, типа "{blal-bal-bla}", и нам нужно их заменить на что то нужное. Для этого нам нужно инициализировать какое-нибудь событие, которое мы потом перехватим, и в качестве параметра передать нашу переменную:
    Код (PHP):
    1. $results = $dispatcher->trigger( 'onMyComponentWriteData', array( &content ) );

    Переменная передается "по ссылке" для возможности ее модификиции...

    Переходим к плагину.

    2. Перехват события

    Открываем файл - плагина. В нем сейчас только подключена библиотека для работы с плагинами и описан "голый" класс, без методов:
    Код (PHP):
    1. <?php
    2.  
    3. jimport('joomla.plugin.plugin');
    4.  
    5. class plgMyComponentContentReplace extends JPlugin
    6. {
    7.  
    8. }


    Теперь нам необходимо перехватить событие "onMyComponentWriteData", которое мы инициализировали в компоненте.
    Добавляем метод с одноименным названием:
    Код (PHP):
    1. class plgMyComponentContentReplace extends JPlugin
    2. {
    3.    function onMyComponentWriteData( &$data )
    4.    {
    5.        //делаем любые манипуляции с нашим контентом
    6.    }
    7. }

    В нашем методе мы можем делать все что угодно - заменять, удалять, добавлять данные в нашу переменную.

    3. Заключение

    Рассмотрим цепочку наших действий:

    1. Компонент формирует(берет из БД) некие данные, контент.
    2. Инициализирует некое событие, которое призвано внести изменения в сформированный контент.
    3. Плагин перехватывает это событие и модифицирует строку.
    4. Компонент передает управление "предсталению", а за тем и шаблону, который в свою очередь выводит конечный результат.


    Надеюсь, что ответил на многие ваши вопросы )
     
    Последнее редактирование: 03.08.2010
  2.  
  3. Offline

    botanist Активист => Cпециалист <=

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Опечатка
     
    Последнее редактирование: 03.08.2010
  4. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    cпасибо, поправил )
     
  5. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    bumpzzzz!
     
  6. Offline

    _voland_ Местный => Cпециалист <=

    Регистрация:
    12.04.2008
    Сообщения:
    2 171
    Симпатии:
    102
    Пол:
    Мужской
    Немного неверная формулировка - правильнее - как заставить работать плагин в собственном компоненте.
    Если речь обо всех плагинах, то нужно использовать стандартные события, которые отрабатываюся плагинами без корректировок кода.
     

Поделиться этой страницей

Загрузка...