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 相关文章推荐
漂亮但不安全的CTB
Oct 09 PHP
PHP session有效期问题
Apr 26 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php运行时动态创建函数的方法
Mar 16 PHP
PHP中list方法用法示例
Dec 01 PHP
万能的php分页类
Jul 06 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP文件打开关闭及读写操作示例解析
Aug 06 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php+mysql数据库查询实例
2015/01/21 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
javascript奇异的arguments分析
2010/10/20 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
[01:07]DOTA2次级职业联赛 - Fpb战队宣传片
2014/12/01 DOTA
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
基于python中theano库的线性回归
2018/08/31 Python
Python Pillow Image Invert
2019/01/22 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
2014学雷锋活动总结
2014/03/09 职场文书
竞聘书怎么写,如何写?
2014/03/31 职场文书
工作分析计划书
2014/04/30 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
工程质检员岗位职责
2015/04/08 职场文书
甲午风云观后感
2015/06/02 职场文书
创业计划书之酒吧
2019/12/02 职场文书
Elasticsearch 基本查询和组合查询
2022/04/19 Python