概述: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类,并写一个你要处理事件的方法。
为了更好使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类,并写一个你要处理事件的方法。
发表评论
-
joomla 模块modules开发教程
2010-05-12 14:16 2808模块是页面扩展轻量级方式,相对组件更为灵活。模块通常用来做页面 ... -
joomla 1.5——JDocument类用法
2010-04-22 14:46 1400文档类,提供一个容易 ... -
[翻译] Joomla XML 解析器规范 上
2010-04-22 14:45 1081概述 Joomla! 1.5 新增 JSimpleXML 类 ... -
joomla源代码探析续(三十一) JHTML 类常用的方法
2010-04-22 14:37 1742我曾经在几篇文章中涉及到JHTML的方法使用,这里不再说了,请 ... -
joomla源代码探析续(三十) JDate类参考
2010-04-22 14:36 1086JDate类与JString类一样是Joomla!中的基础类, ... -
joomla源代码探析续(二十九) JHTML 与JHTMLSelect 类的使用
2010-04-22 14:33 1209我们在form表单生成的过程中,经常需要有select 标签或 ... -
joomla源代码探析续(二十八) 如何扩展JTable类
2010-04-22 14:30 1064JTable类是Active Record设计模式(web应用 ... -
joomla源代码探析续(二十七)组件后台如何设置参数
2010-04-22 14:29 930以下的方法可以在管理后台中添加一个Parameters设置的按 ... -
joomla源代码探析续(二十六)JUser对象和用户权限判断
2010-04-22 14:23 1867每一个访问Joomla网站的用户都对应这一个JUser对象,通 ... -
joomla源代码探析续(二十五)JRequest对象的变量获取过程
2010-04-22 14:22 1189Joomla 1.5 RC3版本的SEF存在不少问题,前段时间 ... -
joomla源代码探析续(二十四)JPagination类
2010-04-22 14:22 1127JPagination类是Joomla的通用分页功能的封装类, ... -
Joomla源代码解析(二十二) 模块是如何被调用执行并渲染(下)
2010-04-22 14:16 955上一文章中提到了getBuffer函数,在函数中实际上调用了r ... -
模块是如何被调用执行并渲染?
2010-04-22 14:12 856以前的文章中,关于/index.php我们已经分析完了 $ma ... -
Joomla源代码解析(二十) MVC组件的执行
2010-04-22 14:10 932以前的文章中,我们曾经说过 $mainframework-&g ... -
Joomla源代码解析(十九) JController
2010-04-22 14:05 896同样 JController 是MVC中重要的起点,正式这个类 ... -
Joomla源代码解析(十八) Jview
2010-04-22 14:03 976MVC模式中,重要的一环,JView 和 tmpl目录中的模板 ... -
Joomla源代码解析(十六) JTable是什么 不指定
2010-04-22 14:01 1463JTable是什么? JTable是数据库中数据表在程序中的表 ... -
Joomla源代码解析(十五) 组件是如何被调用并渲染的
2010-04-22 14:00 1445Joomla代码中, 组件是如 ... -
Joomla源代码解析(十四) JRequest类 不指定
2010-04-22 13:58 867这是另一个Joomla扩展中最常用的类,这个类封装了客户端提交 ... -
Joomla源代码解析(十三) JText类
2010-04-22 11:25 1226Joomla 最常用的类之一,使用方式JTEXT::_('JJ ...
相关推荐
2. **PHPStorm**:强大的PHP集成开发环境,支持Joomla插件、组件和模块的开发。 3. **GitHub或Bitbucket**:代码版本控制工具,用于团队协作和项目托管。 4. **Composer**:PHP依赖管理工具,方便引入和管理第三方库...
3. **插件开发**:插件在特定事件触发时运行,例如文章发布或用户登录。它们可以扩展系统功能,对其他组件、模块或内容进行操作。理解Joomla!'s 插件系统和事件触发机制是开发插件的关键。 4. **模板开发**:模板...
三、Joomla插件开发 Joomla的插件系统是其核心组件之一,允许用户通过安装和激活插件来扩展网站功能。在PHP 5.3.3环境下,开发者可以利用以下关键点开发插件: 1. 插件架构:Joomla插件遵循特定的目录结构和命名...
总的来说,Joomla 3.1.1中文版的出现,极大地降低了国内用户使用和开发基于Joomla网站的门槛。通过熟悉并掌握这些基础知识,无论是网站管理员还是开发者,都能充分利用Joomla的强大功能,构建出高效、美观且易于管理...
1.5 扩展与框架开发**:本书的核心内容是教授读者如何为 Joomla 1.5 开发各种扩展,包括组件、模块、插件等。 - **专业指南**:强调本书的实用性与深度。 - **增加 Joomla 的功能**:通过添加自定义组件、模块、...
- Joomla的Plugin API,插件开发者需要遵循Joomla的规范来编写插件的生命周期方法。 - Virtuemart的API,与Virtuemart的数据模型和业务流程进行集成。 - 国际化支持,通过`.ini`文件实现不同语言环境下的文本本地化...
- `CONTRIBUTING.md`:该文件指导开发者如何为Joomla_v3.1.5贡献代码,包括提交规则、编码规范等。 - `LICENSE.txt`:Joomla遵循GNU General Public License (GPL)进行发布,这个文件详细阐述了软件的使用和分发...
"JB"可能代表了模板开发者或设计团队的名称,这通常意味着他们可能还提供其他Joomla相关的主题或插件。 这款模板的特性可能包括但不限于以下几点: 1. **响应式设计**:虽然没有明确提及,但在2010年,响应式设计...
通常,Joomla 模板会利用流行的前端框架如Bootstrap或Foundation,以提高开发效率和用户体验。js_lightfast_mint 很可能也采用了其中的一种,这些框架提供了预设的CSS样式、布局组件和JavaScript功能,帮助构建现代...
- `CONTRIBUTING.md`: 这是贡献指南,列出了开发者如何参与 Joomla 项目,包括代码提交、问题报告和代码风格规范。 - `index.php`: 网站的入口文件,处理所有请求并初始化 Joomla 系统。 - `LICENSE.txt`: 许可证...
这种方式更符合Joomla的开发规范,同时也可以确保兼容性,因为Joomla的API会随着版本更新而进行调整。 此外,如果你在控制器或模型中需要判断用户状态,可以使用`JFactory::getApplication()->getUser()`或`...
Joomla Platform以其丰富的组件、模块和插件体系,为开发高效、易用的论文管理系统提供了便利。其核心特性包括: - **模板系统**:Joomla的模板系统允许设计出美观且响应式的界面,适应不同设备的访问需求。 - **...
插件开发语言取决于宿主应用支持的语言,如JavaScript、Python、Java等。 6. **插件管理**:许多应用提供了内置的插件管理机制,允许用户安装、禁用、更新插件。这包括插件市场的访问,以及对已安装插件的配置和...
除了SEF设置之外,Joomla还提供了丰富的插件和模块来进一步优化网站性能和用户体验。对于想要深入了解Joomla的用户,可以参考如《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》等专题文章,它们将为你提供...
6. **文档生成**:考虑到Joomla扩展需要遵循一定的API和规范,JStudio可能会提供自动文档生成功能,帮助开发者生成符合Joomla标准的文档。 压缩包中的文件名列表揭示了JStudio可能依赖的一些库和组件: - `Ionic....
如果作为插件,它可能需要与现有的CMS(内容管理系统)如WordPress、Joomla等集成,这就涉及到PHP的插件开发规范和API调用。 在【压缩包子文件的文件名称列表】中,"乘风_图床源码 多接口"可能是源码的主要文件或者...
在PHP环境中,插件常被用于网站开发,如WordPress、Joomla等平台,以增强网站功能,如SEO优化、社交媒体集成、安全防护等。 Qwizi插件核心框架提供了一个结构化的环境,使得开发者可以轻松创建和管理这些插件。它...
这门课程不仅涵盖了UI(用户界面)和交互设计的基础规范,还强调了软件和插件的开发与应用。以下是课程的详细说明和教学设计。 ### 第一部分:大纲说明 1.1 制定依据 该教学大纲基于计算机科学教育的发展趋势和...
此开发手册为开发者提供了详细的指导与规范,帮助他们更好地理解VirtueMart的工作原理及如何进行定制化开发。 ##### 1.1 历史背景 - **起源**: VirtueMart起源于一款名为phpShop的开源购物车脚本。该脚本最初由...
比如本案例中的开发人员,他首先需要学习的是JOOMLA框架。 - **挑战与学习:**在实际工作中会遇到各种各样的问题,如案例中提到的“北京XX广告有限公司”项目,面对不熟悉的技术或框架时,开发人员需要具备快速学习...