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 相关文章推荐
Discuz 模板引擎的封装类代码
Jul 18 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
php的命名空间与自动加载实现方法
Aug 25 PHP
Laravel定时任务的每秒执行代码
Oct 22 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
下载文件的点击数回填
2006/10/09 PHP
php 数组使用详解 推荐
2011/06/02 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
2020/04/16 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
服务整改报告
2014/11/06 职场文书
2014年卫生工作总结
2014/11/27 职场文书
办公室主任岗位职责
2015/01/31 职场文书
七年级生物教学反思
2016/02/20 职场文书