typecho插件编写教程(四):插件挂载


Posted in PHP onMay 28, 2015

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

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

插件的工作就是找到合适的插件点,挂上去,然后执行自己的逻辑。

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

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

我们的插件需要执行的逻辑在这里,Widget_Contents_Post_Edit类的finishPublish方法

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

    // 文章完成发布插件接口

    $this->pluginHandle()->finishPublish($contents, $this);

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

如何挂载

代码如下,有省略。

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

接下来做什么

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

老高就留到下一篇吧!

PHP 相关文章推荐
php getsiteurl()函数
Sep 05 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
php 静态变量与自定义常量的使用方法
Jan 26 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
laravel-admin的多级联动方法
Sep 30 PHP
PHP Opcache安装和配置方法介绍
May 28 #PHP
typecho插件编写教程(三):保存配置
May 28 #PHP
PHP通过API获取手机号码归属地
May 28 #PHP
typecho插件编写教程(二):写一个新插件
May 28 #PHP
typecho插件编写教程(一):Hello World
May 28 #PHP
php实现的mongodb操作类
May 28 #PHP
PHP编译安装时常见错误解决办法
May 28 #PHP
You might like
PHP页面间传递参数实例代码
2008/06/05 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
php简单判断文本编码的方法
2015/07/30 PHP
php面向对象值单例模式
2016/05/03 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
JavaScript之生成器_动力节点Java学院整理
2017/06/30 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python编程之多态用法实例详解
2015/05/19 Python
Python Property属性的2种用法
2015/06/21 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
python实现三壶谜题的示例详解
2020/11/02 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
幼儿园美术教学反思
2014/01/31 职场文书
运动会方阵口号
2014/06/07 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫