开放平台
首页
我的应用
我的分销
开发文档
技术社区
魔方加密
WitFrame
注册
登录
资料设置
消息提醒
财务管理
密码安全
身份认证
退出
Discuz!ᵂ 应用开发指导
[TOCM] ## 介绍 ### Discuz!ᵂ 与 Discuz! X 应用的区别 Discuz!ᵂ 是基于 Discuz! X 实现的 SaaS 服务,依托于 WitFrame 平台而搭建的云端 Discuz! 版本,站长无需自行购买服务器,无需为服务器安装相应的服务软件,无需人工安装,直接云端通过鼠标点击几下,只需 2 分钟即可立刻使用的 Discuz! 版本。因此,在 Discuz!ᵂ 中的应用完全是在云端运行,站长看不到代码。因此也有效的防止了应用代码的泄露风险,保护了开发者的权益。而这便是与 Discuz! X 版本最大的区别,也是优势。同时 Discuz!ᵂ 还可以设置周期付费,让您的应用可以产生持续性收入。 ### Discuz!ᵂ 与 Discuz! 未来版本的关系 只要您的应用兼容了 Discuz!ᵂ,就相当于兼容了 Discuz! 的未来版本,当 Discuz! 未来版本发布后,您的应用可以直接兼容。 ### Discuz!ᵂ 应用的安装流程 Discuz!ᵂ 应用的购买、安装流程和 Discuz! X 完全一致,但是不存在应用的下载步骤,因为应用代码已经在云端,无需下载。站长购买后跳回 Discuz! 后台直接安装即可。当插件类应用发布新版的时候,也和使用 Discuz! X 一样站长自行决定是否需要升级,随时都可以人工升级插件版本。但是模板类应用是自动升级的,站长无法干预。Discuz!ᵂ 中不接受扩展类应用。 ## 开发要点 您必须先将插件、模板兼容 Discuz! X5.0 及 PHP 8.0 环境,请先[下载 X5.0](https://gitee.com/Discuz/DiscuzX/tree/MitFrame/ "下载 X5.0") ### 插件 #### 准备工作 在 Discuz! 开放平台中你无法创建一个同时兼容 Discuz! X 又兼容 Discuz!ᵂ 的应用分支,您需要为 Discuz!ᵂ 单独创建一个应用的分支,请做好应用的备份。 请留意以下新增函数及常量的用法,对之前应用中的相关代码进行替换。 #### DISCUZ_PLUGIN() 如果您的插件中有类似“/source/plugin/xxx”目录的写法调用插件文件,请将其替换为此全局函数,例如: ```php require_once DISCUZ_PLUGIN('xxx').'/index.php'; ``` 涉及前端调用的路径写法是 URI 的一部分,而非后台目录文件调用,无需修改。 友情提示:因安全原因,目前 Discuz!ᵂ 暂时不能完整支持 /source/plugin/ URI 下 PHP 脚本的访问,如非必须请通过 /plugin.php?redirect=identifier:module 入口进行跳转。 #### DISCUZ_TEMPLATE() 如果您的插件中有类似“/template/xxx”目录的写法调用模板文件,请将其替换为此全局函数,例如: ```php $f = DISCUZ_TEMPLATE('xxx').'/data.htm'; ``` #### DISCUZ_DATA 如果您的插件中有类似“/data”目录的写法读写 /data 目录的文件,请将其替换为 DISCUZ_DATA 常量,例如: ```php $lock = DISCUZ_DATA.'cache/data.php'; ``` 由于 Discuz!ᵂ 中所有永久性文件都会存入对象存储,因此 DISCUZ_DATA 目录禁止写入永久文件,否则审核员有权将应用打回。 #### DISCUZ_ROOT_STATIC 由于 /data 目录禁止写入,您可以把永久文件写入到此目录中,它有以下特性: - 此目录与 DISCUZ_ROOT 意义相同,但只有存放的静态文件(md、txt、js、css、json、xml、图片等)可对外展示; - 如保存的文件和实际产品文件及路径相同,不会产生覆盖效果,也不会对外展示; - 此目录占用的空间将计算到 Discuz!ᵂ 用户的平台存储中; #### 使用对象存储 插件中如涉及上传永久性资源文件,请在所有上传的文件中补充 ftpcmd() 或者使用 discuz_upload() 类处理上传,用 $_G['setting']['attachurl'] 做 URL 前缀拼接下载地址。2 个系统函数在 Discuz!ᵂ 中已经自动兼容了对象存储。 #### 禁止删除文件 Discuz!ᵂ 的插件安装、卸载、升级以及任何脚本中,均不能包含删除插件文件的语句,否则审核员有权将应用打回。 #### XML 您只需保留 UTF-8 格式的 XML 文件。提审之前,请将插件 XML 中的版本兼容 version 项的值改为 “W1.5”,且只有此值。 #### 自定义伪静态 这是 Discuz!ᵂ 中的新增内容,插件可以在安装的时候就可以自定义伪静态规则。 ##### 添加伪静态规则 开发者可以在插件的 install.php 中调用方法 ``` rewrite_rules(插件标识符, 伪静态规则数组) ``` 其他页面可以先判断 rewrite_rules 是否存在,如果不存在,可以引用 function_plugin.php,如: ```php if(!function_exists('rewrite_rules')){ include_once libfile('function/plugin'); } ``` 完整示例: ```php 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(插件标识符) ``` 完整示例: ```php if(!function_exists('rewrite_rules')){ include_once libfile('function/plugin'); } rm_rewrite_rules('demoplugin'); ``` #### 判断插件是否试用阶段 工具类插件可能不适用于试用,可以判断是否处于试用阶段,从而给予少量的权限 ```php if(!function_exists('check_addon_trial')){ include_once libfile('function/plugin'); } if(check_addon_trial('plugin_identifier')){ //试用阶段 } ``` ## 发布 Discuz!ᵂ 应用 登录开发者平台后,在首页点击“添加应用”,按照提示逐步填写应用信息,并上传预览图和文件包.  ### Discuz!ᵂ 支持服务周期设置 为了更好的服务 SaaS 客户,开发者开发的应用现已支持服务周期设置。若开启服务周期设定,Discuz!ᵂ 站点首次购买应用的使用有效期为 12 个月,后续站点若继续使用、更新应用,将需进行续费。建议开发者第二年续费服务周期统一设定为12个月/周期。  更多的发布应用方法:https://open.dismall.com/?ac=document&page=faq_addon ## 体验使用 Discuz!ᵂ 前往站点:https://w.discuz.vip
开发文档
平台介绍
技术文档