2.0.2的插件机制讲解

2006年10月4日星期三 19:35, bob, 程序相关, 评论(18), 阅读(18464)
| |
无废话版本。以下的插件均指“可被插件管理器识别并管理的插件”,非模块插件。

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="border1px 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.');
Tags: , , ,
iven
2006年11月25日星期六 14:46
那plugin_return放在整个页面之前?定义变量也是包含在内吗?
iven
2006年11月19日星期日 09:53
请问一下咯
要是page.php页面中有定义变量和if语句的话,plugin_return应该放在哪个位置?
bob 回复于 2006年11月22日星期三 21:15
不是很明白的意思。有if没有if无关的吧,只要最后输出即可。
arwei Email
2006年10月18日星期三 22:17
你好,我的吧吧变插件安装显示'Access Denied
空间支持PHP5,XML-RPC
在后台安装了babbian

运行setup.php无显示
http://wainson.idc.pc77.com.cn/bo-blog/plugin/bababian/setup.php
运行install.php显示Access Denied
http://wainson.idc.pc77.com.cn/bo-blog/plugin/bababian/install.php
请问该如何解决呢?
bob 回复于 2006年10月20日星期五 10:09
插件不是直接打开装,请在后台插件管理中心安装。
啤酒盖子 Homepage
2006年10月16日星期一 15:10
RE:Bob Thank Q.
啤酒盖子 Homepage
2006年10月13日星期五 22:04
请教BOB个意见,插件可不可以排序?目前不能.我发现自己弄了个发送到QQ的插件.但是都是嵌入式.与那个相关日志的都在正文下面.但是.我需要我那个发送到QQ的在相关日志的上方显示.而我先装的相关日志插件.后装的发到QQ那个.这样.顺序就倒了.觉得不美观啊.效果看:http://blog.mzk.com.cn/read.php/211.htm   而我在本地测试.先装的QQ那个.然后装相关日志的.顺序就正合意了.我把网上的相关的插件.删了.再重装.顺序还是没倒过来.unhappy


回:Mesak  谢谢.知道BOB是高亮显示的了.觉得不错.效果挺好的.看着眼不累.
bob 回复于 2006年10月14日星期六 23:55
好吧...会增加插件排序的
Mesak
2006年10月13日星期五 14:07
To 啤酒盖子
Bob的code高亮是用[php] 標籤來實現的
不注意的話是不會去發現新增了標籤的
啤酒盖子 Homepage
2006年10月12日星期四 19:29
貌似很简单的东东.怎么弄完,啥也不出来?也没错误,页面也是UTF8存的.

stupid

在本地弄的.unhappy
啤酒盖子 Homepage
2006年10月12日星期四 16:27
发现BO的CODE已经能颜色显示了。我们的啥时候能啊?是用插件还是什么?grin希望尽快能实现共享哈。嘿嘿。
啤酒盖子 Homepage
2006年10月12日星期四 15:45
感谢~

可以自己写插件了。不过需要再学习。。。。。。。。。。grin
Mesak Homepage
2006年10月9日星期一 01:08
Bob,插件寫好嚕,驗收一下 cool
http://mesak.wablog.info/blog/read.php?241
分页: 1/2 第一页 1 2 下页 最后页


Powered by Bo-Blog 2.1.1 RC1Code detection by Bug.Center.Team
沪ICP备05032643号

© 2008 博睿智 Marshal Design Bo-blog offcial theme