概述
************************************************************************
Plugins(继承于JPlugin的一系列类)依附于全局事件分派系统的观察者类
无论是系统核心,还是第三方扩展都能触发一个或多个Plugins来执行一些功能
插件系统的实现是一个观察者模式。分为两部分,一部分是观察者(JPlugin),另一部分是被观察者(JEventDispatcher)
Plugins命名规范plg<type><name>
类型
************************************************************************
插件的目录为<root>/plugins
系统核心中提供了以下8种类型的插件
Authentication 插件允许你对不同的来源进行验证。当你登陆的时候可以通过Joomla的用户数据库进行验证。然而有很多其它的方式,也是可以的,例如:Google的 OpenID(开放式用户中心身份标识),LDAP(轻量目录访问协议)和很多其它的方式。无论哪种来源,有其开放API,你都可以写一个验证插件,以确认登陆的身份。例如你可以写一个Twitter账户的验证插件,因为他们提供了开放API。
Content 插件用于在显示文章内容时改变或增加一些内容。例如content插件可以隐藏文章种的email地址,或者用自己的方式格式化URL地址。 content插件也可以在文章种搜索特定的标记,然后将他们替换为其它的文本或者HTML。例如在名为Load Module插件中,将会启动所有在banner1位置的模块,并且把{loadmodule banner1}标记,替换成他们的输出内容。
Editor 插件允许你增加新的内容编辑器(常用的有WYSIYWG)
Editor-XTD(扩展)插件允许你editor上增加某些功能按钮。例如现有的默认editor下的几个按钮:Image(增加图片),Pagebreak(插入分页符)和Read more(阅读全文)按钮。
Search 插件允许你在不同的组件,不同的文章中进行搜索。比如文章系统的search插件:Contacts 、Weblinks
System 插件允许你在Joomla站点的各个地方使用PHP代码执行各种动作。
User 插件允许你在不同的时候执行针对于用户的动作。包括登录时、登出时,还有存储用户数据的时候。用户插件中最典型的在不同web应用之间进行桥连接(bridge)。例如建立一个Joomla与Phpbb之间的桥连接。
XML-RPC 插件允许你为网站提供一个XML-RPC服务。当你的网站为其它应用程序(或许是个桌面应用程序)提供网络服务(web services)的时候,它为你提供了远程交互的能力。网络服务真的是一个高深的话题,这里没办法讲的太详细。
每种类型的插件位于<root>/plugins目录下的子目录中
可以在<root>/plugins目录下创建子目录来添加自定义的插件类型
文件
************************************************************************
一个基本的plugin包括两个文件,一个以plugin名称命名的php文件和一个同名的xml配置文件
test.php
示例:
<?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.plugin.plugin' ); /** * Example system plugin */ class plgSystemTest extends JPlugin { /** * Constructor * * @param object $subject The object to observe * @param array $config An array that holds the plugin configuration * @since 1.0 */ function plgSystemTest( &$subject, $config ) { parent::__construct( $subject, $config ); } /** * onAfterInitialise 系统事件表示在系统初始化之后触发此事件 */ function onAfterInitialise() { // 执行操作 } }
系统事件包括
************************************************************************
Authentication onAuthenticate Content onPrepareContent onAfterDisplayTitle onBeforeDisplayContent onBeforeContentSave (new in 1.5.4) onAfterContentSave (new in 1.5.4) Editors onInit onGetContent onSetContent onSave onDisplay onGetInsertMethod Editors XTD (Extended) onDisplay Seach onSearch onSearchAreas System onAfterInitialise onAfterRoute onAfterDispatch onAfterRender User onLoginUser onLoginFailure onLogoutUser onLogoutFailure onBeforeStoreUser onAfterStoreUser onBeforeDeleteUser onAfterDeleteUser XML-RPC onGetWebServices
配置文件
************************************************************************
<?xml version="1.0" encoding="utf-8"?> <install version="1.5.2" type="plugin" group="system" method="upgrade"><!--group:插件的类型--> <name>System - Test</name> <author>Author</author> <creationDate>Month 2008</creationDate> <copyright>Copyright (C) 2008 Holder. All rights reserved.</copyright> <authorEmail>email</authorEmail> <authorUrl>url</authorUrl> <version>1.0.1</version> <description>A test system plugin</description> <files> <filename plugin="example">test.php</filename> </files> <params> <param name="example" type="text" default="" label="Example" description="An example text parameter" /> </params> </install>