Joomla!插件开发指南
Joomla!的插件功能强大,增强了系统的功能和可变性。如同模块之于增强输出,插件主要用于对数据的预处理和事件的相应。比如在多系统中实现同步登陆等。本教程将教您自己动手DIY一个Joomla!的插件。
简介
Joomla!的插件功能强大,增强了系统的功能和可变性。如同模块之于增强输出,插件主要用于对数据的预处理和事件的相应。比如在多系统中实现同步登陆等。本教程将教您自己动手DIY一个Joomla!的插件。
插件类型
Joomla!的插件类型繁多,核心的插件类型主要可以分为以下几类(在Joomla!的安装目录的plugin可看到相应文件夹)。
- authentication
- content
- editors
- editors-xtd
- search
- system
- user
- xmlrpc
Authentication:用于不同资源的使用认证,默认的如果你要登陆Joomla!站点,你必须通过Joomla!数据库里的用户认证。只要任何资源拥有公开的API,你就可以开发认证插件用于认证。
Content:用于文章内容的输出显示,在本文的实例中,将开发一个这种类型的插件,用于输出当前时间。
Editors:用于新增一个编辑器,通常是可见即可得的(WYSIYWG)。
Editors-xtd:编辑器扩展(editors-extend),用于新增编辑器按钮,如图片,视屏等按钮。
Search:当使用搜索组件搜索时,将触发相应搜索事件。
System:主要用于控制Joomla!在执行PHP代码时的行为。
User:用于相应用户事件的插件,如用户登陆、保存用于等。
Xmlrpc:提供Xml-rpc网络服务时的插件。
实例
下面以实际开发一个插件作为实例讲解。
一.注册
使用SQL语句,往数据库里添加一个插件,名为TPlugin.
查看Joomla!的插件管理器,可以发现已经添加了该插件。根据信息可知此插件的源文件名称为TPlugin,且已发布。
二.创建插件源代码(推荐模式)
此模式是 支持面向对象(OO)的开发模式,Joomla!推荐使用该模式
在Joomla!的安装目录下的plugin/content下新增一个名为TPlugin.php的文件。
之后打开该目录下的example.php,复制其中的内容到TPlugin.php,并把其中的类名和构造函数从原来的 plgContentExample改为plgContentTPlugin。
修改其中的onAfterDisplayTitle方法为
要注意的是类名、构造函数名需一直,其中类名的插件名部分必须和SQL语句中的elmenet和php文件的名称以及之后xml文件中的filename中的plugin元素一致。
此函数的意义为文章的标题显示完以后将触发该事件。Joomla!内置了很多基本事件,你可以通过查看各个插件类型下的example.php了解。比如这里内容插件content目录下的事件就分为
- onPrepareContent
- onAfterDisplayTitle
- onBeforeDisplayContent
- onBeforeContentSave (new in 1.5.4)
- onAfterContentSave (new in 1.5.4)
其它插件分类的事件列表如下:
Authentication
- onAuthenticate
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
三.创建插件源代码(兼容模式)
该方法创建的插件在当前仍在使用中,但将被逐步以面向对象的方法重写。
首先取得一个mainframe对象,当注册一个'onAfterDisplayTitle'事件,当该事件被触发时,将调用pluginTPlugin()函数。
四.创建xml安装文件
新建一个TPlugin.xml的文件,并从example.xml中复制全部内容到TPlugin.xml
注意install标签中的grounp元素代表插件的类型。Files标签的自标签filename中的属性plugin为标签的名称。