准备工作
在 Discuz! 开放平台中你无法创建一个同时兼容 Discuz! X 又兼容 Discuz!ᵂ 的应用分支,您需要为 Discuz!ᵂ 单独创建一个应用的分支,请做好应用的备份。
请将本补丁所附带的 function_path.php 文件为 Discuz!ᵂ 版额外增加的常量和全局函数,插件中可用以下方法引用此文件。
require_once libfile('function/path');
虽然在 Discuz!ᵂ 中这么引用可能有些多余,但由于是 require_once 并不会有任何实际性操作,但在 Discuz! X 中是有效的。
DISCUZ_PLUGIN()
如果您的插件中有类似“/source/plugin/xxx”目录的写法调用插件文件,请将其替换为此全局函数,例如:
require_once DISCUX_PLUGIN('xxx').'/index.php';
涉及前端调用的路径写法是 URI 的一部分,而非后台目录文件调用,无需修改。
DISCUZ_TEMPLATE()
如果您的插件中有类似“/template/xxx”目录的写法调用模板文件,请将其替换为此全局函数,例如:
$f = DISCUZ_TEMPLATE('xxx').'/data.htm';
DISCUZ_DATA
如果您的插件中有类似“/data”目录的写法读写 /data 目录的文件,请将其替换为 DISCUZ_DATA 常量,例如:
$lock = DISCUZ_DATA.'cache/data.php';
由于 Discuz!ᵂ 中所有永久性文件都会存入对象存储,因此 DISCUZ_DATA 目录禁止写入永久文件,否则审核员有权将应用打回。
使用对象存储
插件中如涉及上传永久性资源文件,请在所有上传的文件中补充 ftpcmd() 或者使用 discuz_upload() 类处理上传,用 $_G['setting']['attachurl'] 做 URL 前缀拼接下载地址。2 个系统函数在 Discuz!ᵂ 中已经自动兼容了对象存储。
禁止删除文件
Discuz!ᵂ 的插件安装、卸载、升级以及任何脚本中,均不能包含删除插件文件的语句,否则审核员有权将应用打回。
XML
您只需保留 UTF-8 格式的 XML 文件。提审之前,请将插件 XML 中的版本兼容 version 项的值改为 “W1.0”,且只有此值。
自定义伪静态
这是 Discuz!ᵂ 中的新增内容,插件可以在安装的时候就可以自定义伪静态规则。
添加伪静态规则
开发者可以在插件的 install.php 中调用方法
rewrite_rules(插件标识符, 伪静态规则数组)
其他页面可以先判断 rewrite_rules 是否存在,如果不存在,可以引用 function_plugin.php,如:
if(!function_exists('rewrite_rules')){
include_once libfile('function/plugin');
}
完整示例:
if(!function_exists('rewrite_rules')){
include_once libfile('function/plugin');
}
$rules = array(
'/list-(\d+)\.html/' => 'forum.php?mod=forumdisplay&fid=\1',
'/view-(\d+)\.html/' => 'forum.php?mod=viewthread&tid=\1',
);
rewrite_rules('demoplugin', $rules);
规则数组按照 PHP 的正则替换格式书写,key 为正则表达式,value 为替换后的 URI。
删除伪静态规则
开发者在站长卸载插件时需要清除伪静态规则,在 uninstall.php 中调用方法,也可以在其他页面使用清除伪静态规则方法
rm_rewrite_rules(插件标识符)
完整示例:
if(!function_exists('rewrite_rules')){
include_once libfile('function/plugin');
}
rm_rewrite_rules('demoplugin');