終于,在能夠保存配置信息后,我們可以開始編寫插件的掛載功能了。
首先我們需要知道系統(tǒng)為我們在各個關(guān)鍵的環(huán)節(jié)都預留了插件點給我們,系統(tǒng)運行到插件點時,會檢測到是否有插件掛在這個點上,然后執(zhí)行插件的邏輯!
插件的工作就是找到合適的插件點,掛上去,然后執(zhí)行自己的邏輯。
插件點,插件鉤子,插件接口。。。在老高這兒是一個概念
我們的插件需要執(zhí)行的邏輯在這里,Widget_Contents_Post_Edit類的finishPublish方法
文件路徑var/Widget/Contents/Post/Edit.php:736,可以看到,接口為我們傳遞了兩個參數(shù),一個是發(fā)布的內(nèi)容,另一個是類本身。有了類本身,我們可以在插件中隨意調(diào)用他的公共方法!
// 文章完成發(fā)布插件接口
$this->pluginHandle()->finishPublish($contents, $this);
還有一個頁面發(fā)布接口,下面的代碼會提到。
如何掛載
代碼如下,有省略。
<?php
class BaiduSubmitTest_Plugin implements Typecho_Plugin_Interface
{
public static function activate(){
//掛載發(fā)布文章和頁面的接口
Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');
Typecho_Plugin::factory('Widget_Contents_Page_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');
return '插件安裝成功,請進入設置填寫準入密鑰';
}
...
...
public static function render($contents, $class){
//do something
}
}
有代碼我們看到,在插件激活時,系統(tǒng)將插件類BaiduSubmitTest_Plugin的render方法綁定到finishPublish的接口上!由于finishPublish會傳遞兩個參數(shù),所以render方法也要接受兩個參數(shù)。
此時,只要插件正常啟用,當我們發(fā)布完某一篇文章后,系統(tǒng)就會自動調(diào)用BaiduSubmitTest_Plugin:render()方法了。
仔細觀察源代碼,你會發(fā)現(xiàn)此接口沒有返回值,如果有返回值怎么辦?
這個情況比較復雜,老高先留個坑。
為什么叫render方法?
老高從hello world中復制粘貼過來的,一直沒有改名。
接下來做什么
掛載點搞定了,下一步就是執(zhí)行我們的核心邏輯代碼了。
老高就留到下一篇吧!