Обзор
Новое в Joomla! 1,5 класс JPlugin. В усилий для перемещения Joomla! в сторону более эффективного объектно-ориентированного программирования новый плагин система была разработана. Плагины наблюдателя классов, которые придают глобальный объект диспетчера событий в Joomla! ядро. Что это означает на английском языке? Это означает, что либо Joomla! основной или третий компонент партии или модуля может вызвать событие, которое причин одного или нескольких модулей для выполнения некоторого кода. Разве это не то же самое, мамбот? Нет, не совсем. Он похож на основной принцип в том, что оба плагина и мамбот вызываются события, и оба кода выполнять. Один из вопросов, с мамбот том, что она требует от своих функций должны быть объявлены в глобальном масштабе. С JPlugin является класс, методы, которые обрабатывают события могут поделиться переменных и частные вспомогательные методы, а также, что делает для гораздо чище системы для обработки событий.
Осуществление
Осуществление системы плагинов является то, что по отношению к наблюдателю картина. Она состоит из двух частей, наблюдателя класса, JPlugin, и наблюдаемая класса, JEventDispatcher.
/**
* 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. Вот что происходит в конструкторе:
//Регистрация наблюдателей ($this), поэтому мы можем быть уведомление
$subject->attach($this);
// Установить предметом для наблюдения
$this->_subject = &$subject;
Это придает JPlugin для наблюдаемого объекта. В случае плагинов, они наблюдают объект JEventDispatcher.
Вторая важная вещь, чтобы отметить это способ обновления. Метод обновления передается массив из триггера. Массив содержит два элемента - события и аргументы. После обновления метод получает этот массив он извлекает события и удаляет его из аргументов. Затем она вызывает метод "событие" название (передачи аргументов массив) и возвращает свой ответ.
Третья сторона использования
<?php
/**
* @version $Id: $
* @package
* @subpackage
* @copyright
* @license
*/
jimport('joomla.plugin');
/**
* Example Plugin
*
* @author
* @package
* @subpackage
* @since
*/
class ExamplePlugin extends JPlugin
{
/**
* Constructor
*
* @param object $subject The object to observe
* @since 1.1
*/
function ExamplePlugin( &$subject ) {
parent::__construct( $subject );
}
/**
* This method handles the onIncrement event. It takes an integer input and
* increments its value.
*
* @access public
* @param int $input An integer to increment
* @return int Incremented integer
* @since 1.1
*/
function onIncrement($input)
{
return $input++;
}
}
?>
Как вы можете видеть, это довольно просто создать JPlugin. Это действительно так просто, как создание класса, который расширяет JPlugin и писать метод для каждого события вы хотите плагин для обработки.
