Joomla插件开发规范

概述:JPlugin Joomla 1.5的新功能

为了更好使Joomla符合面向对象的框架,引入了JPlugin。Plugins 是依附于全局事件分派系统的观察者类。这就意味无论是Joomla核心,还是第三方组件,模块都能触发一个或多个JPlugins来执行一些功能。这与 mambot并不完全相同。虽然mambot与plugin都是事件触发并执行代码,但是mammot需要全局范围的声明,而JPlugin是一个类,事件处理函数能有自己的变量和私有的helper方法,这是整个事件处理系统更加清晰。


2. 实现

JPlugin 系统的实现是一个观察者模式。有两部分,一部分是观察者(JPlugin),另一部分是被观察者(JEventDispatcher)


2.1 JPlugin 类

部分代码如下:

/**
* JPlugin Class
*
* @author Louis Landry < louis@webimagery.net为防备电子邮件地址收集器,这个 E-mail 地址被隐藏,你的浏览器必须支持 Javascript 才可看到这个邮件地址 >
* @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;
}
}
}

2.1.1 详细设计

两个重要的部分使这个类得以运行

一个是构造器,在构造函数中做了以下操作:

// 注册观察者
$subject->attach($this);
// 设置观察目标
$this->_subject = & $subject;

这样就将JPlugin与被观察者建立了联系,所有的plugin都观察JEventDispatcher对象

第二个重要的就是update方法,这个方法传递给触发器一个数组,数组有两个参数,事件和参数。一旦update方法接收到数组,那么它 提出事件,并清除数组.接下来调用数组传递来的 ‘event’ 方法,返回结果。


3. 第三方使用

例程:

/**
* @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类,并写一个你要处理事件的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值