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函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
PHP实现股票趋势图和柱形图
Feb 07 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
Mar 07 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
PHP中常用的魔术方法
Apr 28 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计划任务、定时执行任务的实现代码
2011/04/23 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
文档对象模型DOM通俗讲解
2013/11/01 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
微信小程序实现锚点跳转
2020/11/23 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python程序设计入门(3)数组的使用
2014/06/16 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
python字典快速保存于读取的方法
2018/03/23 Python
python监控进程脚本
2018/04/12 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
《桂林山水》教学反思
2014/02/08 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
《包身工》教学反思
2016/02/23 职场文书
安全责任协议书范本
2016/03/23 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
python flappy bird小游戏分步实现流程
2022/02/15 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python