Joomla поддержка

поддержка и продвижение сайтов, разработка компонентов и расширений

Регионы и города компонент Joomla 1.0.3
Компонент  «Регионы и города»  является информационной базой, содержащей все населённые пункты российской фед...читать
 
 
Разработки | Компоненты | Баннеры | Читаем | Карта сайта | Портфолио
 
 

Введение в плагины Joomla, принцип работы

В Joomla реализована очень мощная и гибкая система для обработки событий. Придерживаясь идеологии эффективного ООП реализована "система наблюдения (прослушивания)", которая реагирует на зарегистрированные события и выполняет какие либо функции. Проще говоря -  они позволяют писать собственные расширения ядра Joomla, без его модификаций.

 

Реализация

Система событий базируется на двух классах

  • JPlugin - наблюдаемый класс.
  • JEventDispather - класс- наблюдатель.
/**
 * JPlugin Class
 *
 * @package Joomla.Framework
 * @subpackage Application
 * @since 1.5
 */
class JPlugin extends JObserver
{
        /**
         * Constructor
         *
         * For php4 compatability we must not use the __constructor as a constructor for plugins
         * because func_get_args ( void ) returns a copy of all passed arguments NOT references.
         * This causes problems with cross-referencing necessary for the observer design pattern.
         *
         * @param object $subject The object to observe
         * @since 1.5
         */
        function JPlugin(& $subject)
        {
                parent::__construct($subject);
        }
  
        /**
         * Method to map events to handler methods
         *
         * @access public
         * @param array Arguments
         * @return mixed Routine return value
         * @since 1.1
         */
        function update( &$args )
        {
                /*
                 * First lets get the event from the argument array.  Next we will unset the
                 * event argument as it has no bearing on the method to handle the event.
                 */
                $event = $args['event'];
                unset($args['event']);
  
                /*
                 * If the method to handle an event exists, call it and return its return
                 * value.  If it does not exist, return a boolean true.
                 */
                if (method_exists($this, $event)) {
                        return call_user_func_array(array($this, $event), $args);
                } else {
                        return true;
                }
        }
}

Этот класс делает две очень важные вещи. 

Первое - это конструктор класса, который создаст экземпляр родительского класса JObserver. Вот что происходить в нем:

// Регистрация наблюдателя
$subject->attach($this);
  
// Установка объекта наблюдения
$this->_subject = &$subject;

Вторая важная вещь - это метод update. Метод получает массив из триггера, который содержит в себе два элемента - название события и список аргументов. После того как был вызван update, информация о названии события извлекается в отдельную переменную и удаляется, далее вызывается метод "event", в который передаются все параметры. В итоге Update - это ответ из self::$event($args);

Пример стороннего плагина

jimport('joomla.plugin');
  
  
/**
 * Example Plugin
 */
class ExamplePlugin extends JPlugin
{
        /**
         * Обязательный конструктор класса
         */
        function ExamplePlugin( &$subject ) {
                parent::__construct( $subject );
        }
  
        /**
         * Этот метод  является обработчиком для события onIncrement.
         * Он получает в виде аргумента целое число и делает инкремент (+1).
         */
        function onIncrement($input)
        {
                return $input++;
        }
}

Как видно, плагин сделать очень просто - достаточно правильно расширить класс JPlugin и описать обработку событий в виде методов.


 

Популярное
Свежий баян


Internet новости

Facebook запустит магазин социальных приложений Магазин социальных приложений (App Center) станет доступен через несколько недель как в "обычном" Facebook, так и в мобильных приложениях соцсети для


Работники Facebook заплатят по миллиону долларов налогов после IPO По информации американского новостного сайта, 3500 сотрудникам соцсети в этом году придется выплатить 4 миллиарда долларов налогов, что в среднем сос


9 мая после сообщений об авиакатастрофе SSJ-100 пользователь Твиттера 4katrin (Kate Solovyeva) написала: "А че суперджет рухнул?! Хахаха! Говномашина


Спрос на акции Facebook превысил предложение Официальных комментариев менеджмента Facebook агентству получить не удалось. В то же время, Bloomberg отмечает, что спрос на акции социальной сети ок


Opera Mini заблокировала россиянам Twitter При попытке входа на сайт mobile.twitter.com открывается страница с текстом: "Содержимое заблокировано оператором". Причем такое сообщение видят абон


Opera объяснила блокирование Twitter в России Компания пообещала решить проблему в ближайшие сроки. В качестве временного решения пользователям предложено подключаться к интернету по Wi-Fi. С ве


Гендиректор Yahoo! не предоставлял свое резюме при приеме на работу С начала мая Yahoo! оказалась в центре скандала, связанного с Томпсоном. Глава фирмы Third Point (одного из акционеров поисковика) Дэниэл Лёб (Daniel


В Facebook появится платное продвижение записей По данным портала, один из местных пользователей получил предложение "пометить" свою запись в ленте новостей своих "френдов" за два доллара США. В ко


Opera отчиталась об устранении проблем с доступом к Twitter Как говорится в сообщении компании, проблемы были связаны с тем, что обновления на сервере (очевидно, на сервере Opera) конфликтовали с обновлениями


Арестован 17-летний хакер, по данным полиции, был "пресс-секретарем" организации. Его имя не раскрывается, известно только, что он действовал под псевдонимом M





 
 
2008-2012 Разработка сайтов в Тольятти "GDM-iT"
тел. (8482) 43-77-29
Проектирование: G D M
& jСreator
312497623