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 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
PHP中isset与array_key_exists的区别实例分析
Jun 02 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
php中通用的excel导出方法实例
Dec 30 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 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 301转向实现代码
2008/09/18 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP中PDO的错误处理
2011/09/04 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
Script的加载方法小结
2011/01/12 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
2019/02/28 NodeJs
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
python实现百度语音识别api
2018/04/10 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
详解python中@的用法
2019/03/27 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
大学生学习2014全国两会心得体会
2014/03/13 职场文书
务工证明怎么写
2015/06/18 职场文书
小学四年级作文之写景
2019/08/23 职场文书