表单不再预填示例数据,示例只留 placeholder (#3)

用户反馈:输入框里预填的「示例值」点进去得先删干净才能填自己的,不合理。

必须分清两类,否则会误删真实配置:
- A 类 真实配置(从数据库读出来的)→ 保留
- B 类 出厂示例(代码/配置文件里写死的)→ 清空,示例移 placeholder

本次处理的 B 类:

1. 安装页「网站名称」
   原先回显 config.example.php 里的出厂名「轻反馈」,用户以为要保留。
   现在首次进入为空,仅在表单校验失败重来时回填用户刚才填的内容。

2. 安装页「管理员用户名」
   原先预填 admin,现在为空,placeholder 提示「例如 admin」。

3. 后台「对象键前缀」
   原先显示 fb(来自 config 默认值),现在为空,placeholder「留空即用 fb」。

4. 后台「关闭通知邮件标题」
   原先显示模板「关于你反馈的问题《%s》」,现在为空,placeholder 给出模板。

## 新增 fb_form_val()
config.example.php 里给的出厂默认值和「用户填过的值」在 fb_cfg() 里合并后
分不出来 —— 表单永远显示得出内容。这个函数按「数据库里有没有这条设置」判定:
设过就回显(哪怕值恰好等于默认),没设过就当未自定义、显示空。

## 顺带修复一个真 bug
close_mail_subject 原先留空会存成空字符串,fb_cfg() 返回空串后
sprintf() 得到空邮件标题 —— 用户清空模板就发不出有主题的邮件。
改成留空即删除该设置,回落到默认模板。

## 验证
#3 专项 20/20(含:真实配置保存后必须回显、清空后必须回落默认且不存空串);
回归全绿:全新安装 33/33、安装向导 60/60、老基线 25/25、约束检查 20/20。
This commit is contained in:
2026-11-01 16:53:52 +08:00
parent f1a81cbaa1
commit e408dc78b8
3 changed files with 52 additions and 10 deletions
+27
View File
@@ -94,6 +94,33 @@ function fb_default_software() {
return $list ? $list[0] : null;
}
/**
* 表单回显用:如果当前值等于「出厂默认」,就返回空串。
*
* 为什么需要:config.example.php 里给 oss.prefix 写了 'fb'、
* close_mail_subject 写了模板,fb_cfg() 会把文件配置和数据库设置合并,
* 所以表单永远显示得出值 —— 用户点进去得先删掉这段"看起来是数据"的默认值。
*
* 用这个函数包一层:等于默认就显示空,用户看到的是干净的输入框;
* 真自己改过(值 ≠ 默认)才回显。
*
* @param string $cur 当前生效值
* @param string $default 出厂默认值
* @return string 要回显的值(等于默认则空)
*/
function fb_form_val($cur, $default, $settingKey = '') {
$cur = (string)$cur;
// 有键名时以「数据库里设过没有」为准 —— 比"值等于默认"可靠:
// 用户真把站点名写成「轻反馈」也是他自己设的,不该被当成未设置。
// 但文件配置里的出厂值不算「设过」,因为那不是用户的输入。
if ($settingKey !== '') {
$exists = fb_setting($settingKey, null) !== null;
if ($exists) { return $cur; }
return ($cur === (string)$default) ? '' : $cur;
}
return ($cur === (string)$default) ? '' : $cur;
}
/**
* 校验并规范化主题色(#RRGGBB)。
* @return string 合法则返回小写 6 位十六进制;非法返回空串