开始
编写一个内容插件,名字叫 Chapter 02 Test 01(插件文件名ch02test01
)。先不考虑功能,先把框架安装上。不是创建安装包然后安装,这次直接在Joomla中创建文件,然后通过Discove来安装。
首先创建目录:plugins/content/ch02test01
添加两个文件:ch02test01.php
和ch02test01.xml
命名规则
插件名:ch02test01,包名:plg_content_ch02test01,类名:plgContentCh02test01
类名有严格的定义:Plg开头,跟着插件类型名,然后是插件名。
插件类和方法
创建一个插件就声明一个类。这个类在事件触发是,被实例化为对象。比如,你创建了一个内容插件,当系统事件触发时,什么都不会发生,当内容事件触发时,类实例化为对象,Joomla检查这个对象事件方法存不存在。细节都在JPlugin
、JPluginHelper
、JEventDispatcher
三个类里。使用观察者模式。
类继承自JPlugin
。理论上,可以跳过JPlugin
,直接继承JEvent
,因为JEvent
实际保存需要的功能。但是JPlugin
包含很多有用的工具,比如初始化插件参数。
因为父类JPlugin
不一定包含在Joomla核心中,所以需要通过jimport函数先自动加载这个类。有时候可以跳过这个步骤,比如内容插件,显然是在系统插件调用后才调用,所以JPlugin
已经包含了。
添加时间方法到类
当一个事件被Joomla抛出后,事件首先指定插件组和事件方法。如果事件方法存在于类中,就会被自动调用。根据不同的方法,需要额外的方法参数。当一个个研究Joomla核心的事件时,就会更明白了。比如,可以添加事件方法用再在显示内容时添加部分内容。
oncontentbeforedisplay
的参数
四个:
- 一个数组,$context,包含内容类型的meta data,比如com_content.article
- 对象 , $row,指向实际要显示的内容
- 用过的参数,比如,文章参数
- 目前显示的 $page。
$row指向原始内容,意味着我们可以修改这个参数来直接修改内容。不但可以修改文章内容,还可以修改文章标题、作者以及其他属性。如果只是想修改文章内容,最好使用onContentPrepare
这个时间方法。
找到插件参数
注意每个事件方法都有不同的参数和返回值。所以需要查出这些方法和返回值。怎么办,一是参考Joomla的文档docs.joomla.org,二是这本书,三是看Joomla的代码。最后一种方法最好。读源代码,找到事件在哪调用的,能够更好的理解插件的工作机制。
演示代码
添加些示例代码吧,
public function onContentBeforeDisplay($context, &$row, &$params, $page = 0)
{
$row->title = $row->title . ' [test01]';
$row->text = $row->text . '<p>[test01]</p>';
}
保留变量和方法
以下变量和方法已经在JPlugin
中定义过了,不要重复定义
变量
- $params,插件的参数
- $_name,插件的名称(ch01test01)
- $_type,插件的类型(content)
- $_subject,事件对象的名称
- $_errors,错误
方法
- loadLanguage()
- update()
- def()
- get()
- getProperties()
- getError()
- getErrors()
- set()
- setProperties()
- setError()
XML配置文件
下一章会详细的讨论如何写XML配置文件。现在只做一个最基本的。文件名是ch02test01.xml
。这样做通过Discover
按钮就可以安装插件了。代码如下
<extension type="plugin" group="content">
<name>plg_content_ch02test01</name>
</extension>
空index.html文件
用来防止浏览目录的