|
发表于 2025-4-17 03:17:02
|
查看: 62 |
回复: 0
不一定准确 ,不过我使用这个rules开发了两个插件,目前使用没有问题。
希望有大佬可以完善并分享
- # DiscuzX插件开发的规则
- ### 一、全局规则
- ■ **框架约束**
- 1. 所有插件必须基于`/[插件标识符]`目录开发
- 3. 所有PHP类文件需遵循`class_`前缀命名规范
- 4. 模板文件必须存放于`template/`子目录
- ■ **安全规范**
- - 所有用户输入必须通过`dhtmlspecialchars()`过滤
- - 数据库操作必须使用`DB::query()`方法
- - 禁止直接操作$_GET/$_POST,需通过`getgpc()`获取参数
- ■ **开发流程**
- 1. 优先使用Discuz!X内置的38个嵌入点
- 2. 页面输出必须通过`return`而非`echo`
- 3. 插件配置项需存储在`$_G['cache']['plugin']`
- ### 二、PHP开发规则
- ■ **核心类规范
- 1. 继承`discuz_plugin`基类时必须实现`install()/uninstall()`方法
- 2. 模块类命名格式:`class_[模块名]_[插件标识符]`
- 3. 使用`hookscript`机制时必须包含`check.inc.php`
- ■ **缓存机制
- - 加载插件缓存:`loadcache('plugin')`
- - 更新配置时需调用`updatecache('plugin')`
- - 临时数据存储使用`memory('set', $key, $value)`
- ■ **API调用示例
- // 用户权限验证模板
- if(!$_G['uid']) {
- showmessage('not_loggedin', '', array(), array('login' => 1));
- }
- ### 三、模板开发规则
- ■ **模板规范
- 1. 语言变量必须通过`{lang plugin_identifier:key}`调用
- 2. 循环结构需使用`<!--{loop $list $value}-->`语法
- 3. 条件判断必须包含`<!--{if}-->...<!--{/if}-->`标签
- ■ **CSS规范
- - 样式类名需添加插件标识符前缀(例:.pluginid_btn)
- - 优先继承`common.css`基础样式
- - 移动端模板需存放在`template/touch/`
- ### 四、Debug 日志
- ```
- function plugin_identifier_debug_log($msg) {
- $log_file = DISCUZ_ROOT.'data/log/plugin_identifier_debug.log';
- file_put_contents($log_file, date('Y-m-d H:i:s')." - ".$msg.PHP_EOL, FILE_APPEND);
- }
- ```
- // 示例:记录变量值
- ```
- plugin_identifier_debug_log('用户ID:'.$uid.' 执行操作:'.$action);
- ```
来源:https://www.dismall.com/thread-25467-1-1.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|