2.0.2的插件机制讲解

林继 PHP 技术 6,495 共写了2278个字 (2006-10-06 8:03:31) 没有评论 打印 扫描二维码 百度已收录

From:http://www.bo-blog.com/weblog/read.php/397.htm

无废话版本。以下的插件均指“可被插件管理器识别并管理的插件”,非模块插件。

1. 插件存放的位置
所有插件都存放于plugin文件夹下,并单独建立自己的文件夹。比如 plugin/mynewplugin。

2. 文件构成
*setup.php 必需,插件识别信息,如名称、描述、制作者等
*install.php 非必需,插件安装时调用的文件,可用于新建数据表,创建文件,初始化数据等
*uninstall.php 非必需,插件卸载时调用的文件,可用于删除插件生成的临时文件等
*admin.php 非必需,插件后台调用文件
*<“接口”识别字符>.php 非必需,插件运行时调用的文件(解释见后)
*其它必要的文件,如图片
所有文件如有多字节文字,需以UTF-8编码保存。

3. setup.php的文件格式
以巴巴变相册插件为例。

  1. <?php  
  2. $info['name']="bababian"; //插件识别名,必需是拉丁字母或数字,必需与插件所在文件夹同名  
  3. $info['author']="Bob";  //插件作者  
  4. $info['intro']="巴巴变相册";  //插件作用描述  
  5. $info['version']="1.0";  //插件自身的版本  
  6. $info['authorurl']="http://www.bo-blog.com";  //插件开发者网站  
  7. $info['blogversion']="2.0.1";  //插件可正常运行的最低blog程序版本  
  8. $info['register']="page";  //插件调用的“接口”识别字符的名字  
  9. ?>

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,内容大致如下:

  1. <?PHP  
  2. $plugin_return='Hello, world';  
  3. ?>  *如果想在页面打开时自动屏蔽侧边栏,可在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 。该文件的内容大致如下:

  1. <?php  
  2. $plugin_return="这里是广告代码";  
  3. ?>

*示例3:在日志正文下方插入一个框,框内显示访客的IP地址。
A. 创建setup.php,设置 $info[‘register’]=”entrycontentend”;。
B. 创建文件 entrycontentend.php 。该文件的内容大致如下:

  1. <?php  
  2. $yourip=$_SERVER['REMOTE_ADDR'];  
  3. $plugin_return="<div style="border: 1px solid #000; width: 90%;">{$yourip}</div>";  
  4. ?>

4.3 替换内容(目前仅 ubbanalyse 一处)
*使用这个“接口”可以对当前正在处理中的文本进行改写等操作。

*目前仅支持在UBB解析时,对正在解析的内容进行更改。

*改写内容的操作需写入函数 plugin_插件识别名_run() 中。该函数只接受一个变量,即需要改写的内容。该函数返回值即改写后的内容。

*示例4:自定义UBB代码[marquee]。该代码的作用是使文字横向滚动。
A. 设该插件的识别名为 domarquee 。
B. 创建plugin/domarquee/setup.php,设置 $info[‘register’]=”ubbanalyse “;。
C. 创建文件 plugin/domarquee/ubbanalyse.php 。该文件的内容大致如下:

  1. <?php  
  2. function plugin_domarquee_run ($strInput) {  
  3.   $strInput=preg_replace("/[marquee](.+?)[/marquee]/i",  "<marquee>1</marquee>", $strInput);  
  4.   return $strInput;  
  5. }

?> 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.’);

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >