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 相关文章推荐
关于时间计算的结总
Dec 06 PHP
剖析 PHP 中的输出缓冲
Dec 21 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
PHP UTF8中文字符截断函数代码
Sep 11 PHP
php四种基础算法代码实例
Oct 29 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
详解php中的implements 使用
Jun 13 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP常见数组排序方法小结
Aug 20 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
德生S2000电路分析
2021/03/02 无线电
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
javascript 写类方式之四
2009/07/05 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
基于Django统计博客文章阅读量
2019/10/29 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
西班牙自行车和跑步商店:Alltricks
2018/07/07 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
《雨点》教学反思
2014/02/12 职场文书
青春励志演讲稿
2014/04/29 职场文书
商业计划书范文
2019/04/24 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
实例详解Python的进程,线程和协程
2022/03/13 Python