B-blog2.0.2的插件机制讲解

jackxiang 2011-6-18 16:51 | |
无废话版本。以下的插件均指“可被插件管理器识别并管理的插件”,非模块插件。
1. 插件存放的位置
所有插件都存放于plugin文件夹下,并单独建立自己的文件夹。比如 plugin/mynewplugin。
2. 文件构成
*setup.php  必需,插件识别信息,如名称、描述、制作者等
*install.php  非必需,插件安装时调用的文件,可用于新建数据表,创建文件,初始化数据等
*uninstall.php  非必需,插件卸载时调用的文件,可用于删除插件生成的临时文件等
*admin.php  非必需,插件后台调用文件
*<“接口”识别字符>.php  非必需,插件运行时调用的文件(解释见后)
*其它必要的文件,如图片
所有文件如有多字节文字,需以UTF-8编码保存。
3. setup.php的文件格式
以巴巴变相册插件为例。
<?php
$info['name']="bababian"; //插件识别名,必需是拉丁字母或数字,必需与插件所在文件夹同名
$info['author']="Bob";  //插件作者
$info['intro']="巴巴变相册";  //插件作用描述
$info['version']="1.0";  //插件自身的版本
$info['authorurl']="http://www.bo-blog.com";  //插件开发者网站
$info['blogversion']="2.0.1";  //插件可正常运行的最低blog程序版本
$info['register']="page";  //插件调用的“接口”识别字符的名字
?>
4. 运行方法
目前为止,提供了以下一些“接口”。(这个不是一般意义上的接口,所以打个引号)
4.1 独立前台页面(page)
*设置 $info['register'] 为page,即可注册一个独立前台页面。插件激活后,用户可通过 index.php?act=插件名 来直接进入插件提供的独立页面。
*该独立页面的内容需写入 page.php ,放置于该插件的文件夹下。该独立页面的内容由变量 $plugin_return 提供。
*示例1:新建一个独立页面,进入该页面时显示“Hello, world”字样。
A. 创建setup.php,设置 $info['register']="page";。
B. 创建page.php,内容大致如下:
<?PHP
$plugin_return='Hello, world';
?>
*如果想在页面打开时自动屏蔽侧边栏,可在page.php中加入:
$plugin_closesidebar=1;
4.2 嵌入内容(有 entrybegin,commentbegin,entrycontentend,entryend 四个)
*使用这4个“接口”可在页面中插入指定的内容,运行PHP代码。
*4个“接口”的具体位置是:
entrybegin - 日志开头的位置
commentbegin - 评论(或评论框)开始的位置
entrycontentend - 日志正文下方的位置
entryend - 整篇日志(包含管理条)结束的位置
*嵌入的内容同样由变量 $plugin_return 提供。
*示例2:在日志正文下方插入一个广告代码。
A. 创建setup.php,设置 $info['register']="entrycontentend";。
B. 创建文件 entrycontentend.php 。该文件的内容大致如下:
<?php
$plugin_return="这里是广告代码";
?>
*示例3:在日志正文下方插入一个框,框内显示访客的IP地址。
A. 创建setup.php,设置 $info['register']="entrycontentend";。
B. 创建文件 entrycontentend.php 。该文件的内容大致如下:
<?php
$yourip=$_SERVER['REMOTE_ADDR'];
$plugin_return="<div style="border: 1px solid #000; width: 90%;">{$yourip}</div>";
?>
4.3 替换内容(目前仅 ubbanalyse 一处)
*使用这个“接口”可以对当前正在处理中的文本进行改写等操作。
*目前仅支持在UBB解析时,对正在解析的内容进行更改。
*改写内容的操作需写入函数 plugin_插件识别名_run() 中。该函数只接受一个变量,即需要改写的内容。该函数返回值即改写后的内容。
*示例4:自定义UBB代码[marquee]。该代码的作用是使文字横向滚动。
A. 设该插件的识别名为 domarquee 。
B. 创建plugin/domarquee/setup.php,设置 $info['register']="ubbanalyse ";。
C. 创建文件 plugin/domarquee/ubbanalyse.php 。该文件的内容大致如下:
<?php
function plugin_domarquee_run ($strInput) {
  $strInput=preg_replace("/[marquee](.+?)[/marquee]/i",  "<marquee>1</marquee>", $strInput);
  return $strInput;
}
?>
5. 插件后台管理页面
*如果在插件安装的时候,检测到该插件文件夹下存在 admin.php ,则今后可在插件管理器中点击相应链接进入这个插件的管理页面。反之则不能。该插件管理页面的地址形式为 admin.php?act=插件名 。
*插件管理页面的内容需写入 admin.php ,放置于该插件的文件夹下。该独立页面的内容同样由变量 $plugin_return 提供。
*与独立前台页面(page)类似。参考page的示例。
6. install.php 和 uninstall.php 提供的两个特殊函数
*在这两个文件中,您可以使用函数 add_module() 和 remove_module() 来创建/移除一个模块项目。
*示例5:在安装该插件的同时,安装一个名为 example 的模块项目。
A. 创建该模块项目的安装文件 example.blog 。
B. 在install.php中写上 add_module ('minivote.blog'); ;在 uninstall.php 中写上 remove_module ('minivote.blog');
7. 安全提示
*请注意,为了避免插件文件被独立运行可能带来的问题,请在各个PHP的头部加入必要的条件判断。
*在前台,可通过判断常数 VALIDREQUEST 是否定义过来判断是否为正常调用。
在后台,可通过判断常数 VALIDADMIN 是否定义过来判断是否为正常调用。
示例代码如: if (!defined('VALIDREQUEST')) die ('Access Denied.');

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/4391/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]