挂载Typecho插件

对于我们的插件,文章发送成功并在企业微信接受到消息,所以,我们通过分析,需要在发布文章的时候,我们就能拿到该动作,并触发我们插件发送消息的能力。

对此,引出我们插件的核心思想,挂载到Typecho的运行逻辑中,需多的插件都是基于这个核心点,实现不同的需求和功能。

挂载插件

class NewTest_Plugin implements Typecho_Plugin_Interface
{
    /**
     * 激活插件方法,如果激活失败,直接抛出异常
     * 
     * @access public
     * @return void
     * @throws Typecho_Plugin_Exception
     */
    public static function activate()
    {
         //挂载发布文章和页面的接口
        Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('NewTest_Action', 'send');
        Typecho_Plugin::factory('Widget_Contents_Page_Edit')->finishPublish = array('NewTest_Action', 'send');
        
        return _t('测试插件 已启用');
    }
    
    /**
     * 禁用插件方法,如果禁用失败,直接抛出异常
     * 
     * @static
     * @access public
     * @return void
     * @throws Typecho_Plugin_Exception
     */
    public static function deactivate()
    {
        return _t('测试插件 已禁用');
    }
    
    /**
     * 获取插件配置面板
     * 
     * @access public
     * @param Typecho_Widget_Helper_Form $form 配置面板
     * @return void
     */
    public static function config(Typecho_Widget_Helper_Form $form)
    {
         /** 分类名称 */
        $name = new Typecho_Widget_Helper_Form_Element_Text('api', NULL, '这里是机器人链接', _t('企业机器人调用地址'));
        $form->addInput($name);
    }
    
    /**
     * 个人用户的配置面板
     * 
     * @access public
     * @param Typecho_Widget_Helper_Form $form
     * @return void
     */
    public static function personalConfig(Typecho_Widget_Helper_Form $form)
    {
    }
    
   
    public static function render()
    {
    }
}

activate:是主要的入口,在插件激活时,就会执行该函数,所以我们就在这个地方挂载我们的方法。

return _t('测试插件 已启用');:这段可以自定义插件激活提示,反之这是卸载插件提示。

Typecho 命名规则

Typecho类的命名是直接与类的存放位置相挂钩的,存放在var的目录下。比如说,Typecho_Plugin_Interface,就是存放在var/Typecho/Plugin目录下的Interface.php文件。再比如说:Typecho_Widget_Helper_Form_Element_Text 就是存放在var/Typecho/Widget/Helper/Form/Element/Text.php 中。明白了这一点,我们就可以通过参考其它插件,直接找到对应的源文件,来弄清里面的接口。

Typecho 挂载规则

Typecho的程序中预留了很多可以被插的接口。在Widget中,我们可以看到很多pluginHandle这样的地方;在admin下,我们可以看到Typecho_Plugin::factory这样的地方。这些,都是可以被插的。对这些函数指针重新赋值,则会在对应的位置被调用。

参考我们的挂载插件

Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('NewTest_Action', 'send');‘

Widget_Contents_Post_Edit:表明在Widget/Contents/Post/Edit.php目录下,有个finishPublish函数指针,将被定位到NewTest_Action类的spend函数。也就是执行我们自己的逻辑

官方的插件接口,功能列表

https://docs.typecho.org/plugins/hooks

最后修改:2024 年 05 月 27 日
如果觉得我的文章对你有用,请随意赞赏