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中支持多种编码的中文字符串截取函数!
Mar 20 PHP
php中变量及部分适用方法
Mar 27 PHP
基于php iconv函数的使用详解
Jun 09 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
PHP查询网站的PR值
Oct 30 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
PHP扩展开发教程(总结)
Nov 04 PHP
PHP的反射机制实例详解
Mar 29 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
Aug 10 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
PHP反向代理类代码
2014/08/15 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
Python3解释器知识点总结
2019/02/19 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
应届毕业生的自我鉴定
2013/11/13 职场文书
优秀教师先进事迹
2014/01/22 职场文书
大学军训感言1500字
2014/03/09 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
python如何进行基准测试
2021/04/26 Python
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js