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中的字符串函数
Oct 09 PHP
php你的验证码安全码?
Jan 02 PHP
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
深入浅析php json 格式控制
Dec 24 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
PHP simplexml_load_file()函数讲解
Feb 03 PHP
php实例化一个类的具体方法
Sep 19 PHP
php中pcntl_fork详解
Apr 01 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
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JavaScript中string对象
2015/06/12 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
vue实现微信获取用户信息的方法
2019/03/21 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
python中import与from方法总结(推荐)
2019/03/21 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
python与js主要区别点总结
2020/09/13 Python
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
简历自我评价模版
2014/01/31 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
迎新生欢迎词
2015/01/23 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL