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 相关文章推荐
火车头采集器3.0采集图文教程
Mar 17 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
MySql数据库查询结果用表格输出PHP代码示例
Mar 20 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
Aug 28 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
PHP实现导出excel数据的类库用法示例
Oct 15 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
php使用pecl方式安装扩展操作示例
Aug 12 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 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
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
php支付宝APP支付功能
2020/07/29 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python算法学习之基数排序实例
2013/12/18 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
python中if及if-else如何使用
2020/06/02 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
《七颗钻石》教学反思
2014/02/28 职场文书
迎新生欢迎词
2015/01/23 职场文书
导游词之贵州织金洞
2019/10/12 职场文书