開始
編寫一個內容插件,名字叫 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文件
用來防止瀏覽目錄的