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+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
yii2 数据库读写分离配置示例
Feb 10 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 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中的实现trim函数代码
2007/03/19 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
jquery常用操作小结
2014/07/21 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
Python算法之图的遍历
2017/11/16 Python
python os模块简单应用示例
2019/05/23 Python
python中selenium操作下拉滚动条的几种方法汇总
2019/07/14 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
建筑班组长岗位职责
2014/01/02 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
给学校的建议书
2014/03/12 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
python中if和elif的区别介绍
2021/11/07 Python