這篇文章主要介紹了typecho外掛程式編寫教程(四):外掛程式掛載,本文講解了如何找到外掛程式點並掛載外掛程式的方法,需要的朋友可以參考下
終於,在能夠儲存配置資訊後,我們可以開始編寫外掛程式的掛載功能了。
首先我們需要知道系統為我們在各個關鍵的環節都預留了外掛程式點給我們,系統運行到外掛程式點時,會檢測到是否有外掛程式掛在這個點上,然後執行外掛程式的邏輯!
外掛程式的工作就是找到合適的外掛程式點,掛上去,然後執行自己的邏輯。
外掛程式點,外掛程式鉤子,外掛程式介面。。。在老高這兒是一個概念
官方的外掛程式介面及功能列表
我們的外掛程式需要執行的邏輯在這裡,Widget_Contents_Post_Edit類的finishPublish方法
檔案路徑var/Widget/Contents/Post/Edit.php:736,可以看到,介面為我們傳遞了兩個參數,一個是發布的內容,另一個是類本身。有了類本身,我們可以在外掛程式中隨意調用他的公用方法!
代碼如下:
// 文章完成發布外掛程式介面
$this->pluginHandle()->finishPublish($contents, $this);
還有一個頁面發布介面,下面的代碼會提到。
如何掛載
代碼如下,有省略。
代碼如下:
class BaiduSubmitTest_Plugin implements Typecho_Plugin_Interface
{
public static function activate(){
//掛載發布文章和頁面的介面
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
}
}
有代碼我們看到,在外掛程式啟用時,系統將外掛程式類BaiduSubmitTest_Plugin的render方法綁定到finishPublish的介面上!由於finishPublish會傳遞兩個參數,所以render方法也要接受兩個參數。
此時,只要外掛程式正常啟用,當我們發布完某一篇文章後,系統就會自動調用BaiduSubmitTest_Plugin:render()方法了。
仔細觀察原始碼,你會發現此介面沒有傳回值,如果有傳回值怎麼辦?
這個情況比較複雜,老高先留個坑。
為什麼叫render方法?
老高從hello world中複製粘貼過來的,一直沒有改名。
接下來做什麼
掛載點搞定了,下一步就是執行我們的核心邏輯代碼了。
老高就留到下一篇吧!