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文件上传表单摘自drupal的代码
Feb 15 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
php自定义加密与解密程序实例
Dec 31 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
Dec 18 PHP
如何重写Laravel异常处理类详解
Dec 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
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
Django中几种重定向方法
2015/04/28 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
仓库理货员岗位职责
2013/12/18 职场文书
网络维护中文求职信
2014/01/03 职场文书
2014自主招生自荐信策略
2014/01/27 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
毕业生实习证明
2014/09/19 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
运动会开幕式主持词
2015/07/01 职场文书
JavaScript实现淘宝商品图切换效果
2021/04/29 Javascript
MySql新手入门的基本操作汇总
2021/05/13 MySQL
MySQL 全文检索的使用示例
2021/06/07 MySQL
什么是SOLID
2022/03/24 Javascript
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript