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 类商品秒杀计时实现代码
May 05 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
PHP中array_merge和array相加的区别分析
Jun 17 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
功能强大的php文件上传类
Aug 29 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
如何在centos8自定义目录安装php7.3
Nov 28 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
PHP大文件及断点续传下载实现代码
Aug 18 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 whois查询API制作方法
2011/06/23 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
详解python的几种标准输出重定向方式
2016/08/15 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
Python执行时间的几种计算方法
2020/07/31 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
工地安全质量标语
2014/06/07 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
化验员岗位职责
2015/02/14 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
给领导敬酒词
2015/08/12 职场文书
导游词之清晏园
2019/11/22 职场文书