3.1 插件变量与通用配置界面
让插件的配置项由系统托管,你只写取值的那几行。
先判断:通用程序够不够用
Discuz! 的插件接口自带一个通用插件配置管理程序。它把常见的参数配置需求(填个文字、选个开关、勾几个选项)用统一表单收集起来,存进系统表,再同步进系统缓存。
对绝大多数插件来说这就是默认方案——相当于快递柜,柜子尺寸是标准件,你的东西合身就直接塞进去。只有通用程序确实表达不了你的配置形态,才退回自写「扩展项目 管理中心」。官方措辞是「通常情况下应优先使用通用插件配置管理程序,只有在通用程序确实无法实现时才自行编写后台管理模块」。
| 你的需求 | 该走哪条路 |
|---|---|
| 一个值,填了就生效 | 通用变量配置 |
| 一组枚举值,选一个 | 通用变量配置(单选/下拉/多选) |
| 每个版块或用户组填不同值 | 通用变量配置(X5 增强类型) |
| 表单里要嵌自定义表格或色盘 | X5 设置项组件,挂到通用变量上 |
| 要点「测试连接」再决定能否提交 | 自写「扩展项目 管理中心」 |
后台操作路径:从插件列表到变量配置
- 后台 → 顶部菜单「插件」→「插件列表」,找到目标插件;
- 点该插件一行的「详情」,进入详细设置页;
- 找到变量配置这一块,点「添加」或点已有变量名进入编辑;
- 填配置名称(给站长看的标题)、变量名(程序里用的键,规则同 PHP 变量)、选配置类型;
- 点变量前的「详情」,继续编辑说明文字、默认值、排序、扩展参数。
配置名称和变量名是两件事:名称是给站长看的,可以写中文、随时改;变量名写进代码里,一旦有代码在读,改名等于把所有取值点一起掀翻,建议一次定好。
硬前提一条:只有把插件设为「可用」,这些设置才生效。停用状态下变量不参与缓存,代码里读到的是空值。
变量类型怎么选
后台可选类型以你的实际后台为准,常见的是下面这些。X5.0 补了「按版块/按用户组分别设置」的一组增强类型,思路是从「一个插件一份配置」升级成「一个插件多份配置」。
| 类型 | 站长看到的控件 | 典型用途 |
|---|---|---|
| 文本 | 单行输入框 | 接口地址、密钥、昵称前缀 |
| 多行文本 | 文本域 | 公告模板、提示语、代码片段 |
| 数字 | 数字输入框 | 每页条数、保留天数、积分数额 |
| 开关 | 单个勾选框 | 是否记录日志、是否走异步 |
| 单选(radio) | 一组单选钮 | 显示模式、排序方式(选项写 extra 里) |
| 多选(checkbox) | 一组勾选框 | 允许的板块类型、启用的功能模块 |
| 下拉(select) | 下拉菜单 | 数量很大的枚举,如分类列表 |
| 版块选择 | 板块树选择器 | 插件作用范围限定在某几个版 |
| 用户组选择 | 用户组多选 | 哪些组能看到插件入口 |
X5.0 的增强类型配置时以「版块面板」或「用户组面板」展开,站长按版块逐个填:groups(用户组多选)、group_text、group_textarea(按用户组设文本/多行文本)、forum_text、forum_textarea(按版块设文本/多行文本)。
插件里怎么把值读出来
变量值不用查数据库。系统已经把插件配置缓存好了,你要做的是先加载缓存,再按路径取。
<?php
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
// 嵌入点插件和以 plugin.php 为主脚本调用的插件,系统已自动加载过缓存
loadcache('plugin');
// 普通类型:$_G['cache']['plugin'][插件标识][变量名]
$points = isset($_G['cache']['plugin']['myplugin']['checkin_points'])
? intval($_G['cache']['plugin']['myplugin']['checkin_points']) : 10;
// 开关类读到的是 '1' / '0',用 intval 转一下再用
$enabled = !empty($_G['cache']['plugin']['myplugin']['log_enabled']);
这段放在 source/plugin/myplugin/myplugin.inc.php 或任意被调用的 .func.php 里。每次要用现取,别把整个 $_G['cache']['plugin'] 拷进局部变量——那里面是这个站所有插件的全部配置。
按版块、按用户组的变量存放位置不一样,这是最容易踩的地方:
| 变量类型 | 读取路径 |
|---|---|
| 普通变量 | $_G['cache']['plugin'][标识][变量名] |
| 版块类变量 | $_G['cache']['forums'][fid]['plugin'][变量名] |
| 用户组类变量 | $_G['cache']['usergroup_groupid'][groupid]['plugin'][变量名] |
| 用户组类变量(当前用户视角) | $_G['group']['plugin'][变量名] |
缓存读取相对直接查数据库,资源消耗几乎可以忽略。但前提是配置走通用程序存进 pluginvars 表;若你自写后台模块把参数存进自己的表,系统缓存就看不到。
什么时候才该自写「扩展项目 管理中心」
三种情况值得自写:配置之间有依赖;需要异步校验(填了 AppKey 后点按钮去对方接口探活);需要列表型操作(批量导入、批量重算、手动跑任务)——最后一种本就不是「配置」,是管理功能。
自写时脚本以 .inc.php 结尾放在插件目录,模板是固定文件名、放在 template/ 子目录、与脚本同名。在后台模块里选「扩展项目 管理中心」,它会出现在后台插件栏目下。注意:即使模块上设了使用等级,程序内部仍需自行校验权限,外部模块只是引用你的程序,不会替你拦人。
X5.0:模板变量是同一套机制的另一张脸
X5.0 新增模板变量机制——模板自带后台配置页,不必再挂插件承载参数。它完全复刻插件变量机制,变量类型一致,只是入口在「模板 → 设计」而非「插件 → 详情」。
两处细节插件变量这边同样适用:新增的标题栏(给一组设置项加小标题,把长表单切成几段)和分组(多页切换;用了分组之后,显示顺序第一个项目必须是分组类型,否则表单错位)。还有一条:显示顺序设为负数的变量会被隐藏,站长看不到也改不了,适合放应用内部用的开关或版本标记。两边值得互相借鉴。
X5 的两个扩展:隐藏变量与设置项组件
配置在版块、用户组面板且变量名以 fields_ 开头的变量,值会存进 X5.0 新增的 JSON 类型 fields 字段,而不是散成一个个独立列。内置类型仍表达不了的,可写设置项组件:文件放在 source/plugin/{标识}/admin/component/,文件名以 component_ 开头,插件变量和模板变量里都能直接选用。到这一步,还坚持要自写管理模块的门槛已经很高了。
