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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
?繁体转换的class
Oct 09 PHP
PHP函数utf8转gb2312编码
Dec 21 PHP
PHP syntax error, unexpected $end 错误的一种原因及解决
Oct 25 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
我的php学习笔记(毕业设计)
Feb 21 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
php缓存技术详细总结
Aug 07 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
php阿拉伯数字转中文人民币大写
Dec 21 PHP
ThinkPHP中session函数详解
Sep 14 PHP
浅析PHP中的闭包和匿名函数
Dec 25 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
PHP可变函数学习小结
2015/11/29 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
php显示页码分页类的封装
2017/06/08 PHP
php生出随机字符串
2017/07/06 PHP
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
jquery 插件开发备注
2010/08/27 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
中学教师请假制度
2014/02/03 职场文书
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
阳光体育活动总结
2014/04/30 职场文书
通信工程求职信
2014/07/16 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
2015年党总支工作总结
2015/05/25 职场文书
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫