typecho插件编写教程4 - 插件点

终于,在可以保存配置信息后,咱们能够开始编写插件的挂载功能了。php

首先咱们须要知道系统为咱们在各个关键的环节都预留了插件点给咱们,系统运行到插件点时,会检测到是否有插件挂在这个点上,而后执行插件的逻辑!typecho

插件的工做就是找到合适的插件点,挂上去,而后执行本身的逻辑。this

插件点,插件钩子,插件接口。。。在老高这儿是一个概念插件

官方的插件接口及功能列表code

咱们的插件须要执行的逻辑在这里,Widget_Contents_Post_Edit类的finishPublish方法接口

文件路径var/Widget/Contents/Post/Edit.php:736,能够看到,接口为咱们传递了两个参数,一个是发布的内容,另外一个是类自己。有了类自己,咱们能够在插件中随意调用他的公共方法!get

php// 文章完成发布插件接口
    $this->pluginHandle()->finishPublish($contents, $this);

还有一个页面发布接口,下面的代码会提到。it

如何挂载

代码以下,有省略。io

php<?php

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中复制粘贴过来的,一直没有更名。

接下来作什么

挂载点搞定了,下一步就是执行咱们的核心逻辑代码了。

老高就留到下一篇吧!