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中常见的mongodb查询操作
Jun 20 PHP
php模板原理讲解
Nov 13 PHP
php curl post 时出现的问题解决
Jan 30 PHP
php发送post请求函数分享
Mar 06 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
php自定义加密与解密程序实例
Dec 31 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 PHP
php中使用sftp教程
Mar 30 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
Nov 02 PHP
PHP实现动态压缩js与css文件的方法
May 02 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两种快速排序算法实例
2015/02/15 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
php微信开发接入
2016/08/27 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
javascript简易画板开发
2020/04/12 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
wxPython中文教程入门实例
2014/06/09 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
Python实现微信消息防撤回功能的实例代码
2019/04/29 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python脚本和网页有何区别
2020/07/02 Python
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
大学生求职简历的自我评价
2013/10/14 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
祝寿主持词
2015/07/02 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书