From e408dc78b80e6ce1573eb22f0706391bec7fee22 Mon Sep 17 00:00:00 2001 From: Yongquan Date: Sun, 1 Nov 2026 16:53:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A8=E5=8D=95=E4=B8=8D=E5=86=8D=E9=A2=84?= =?UTF-8?q?=E5=A1=AB=E7=A4=BA=E4=BE=8B=E6=95=B0=E6=8D=AE=EF=BC=8C=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=E5=8F=AA=E7=95=99=20placeholder=20(#3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈:输入框里预填的「示例值」点进去得先删干净才能填自己的,不合理。 必须分清两类,否则会误删真实配置: - 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。 --- admin.php | 23 ++++++++++++++++------- install.php | 12 +++++++++--- lib/util.php | 27 +++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/admin.php b/admin.php index a254b09..ed6b7fa 100644 --- a/admin.php +++ b/admin.php @@ -320,8 +320,14 @@ function fb_admin_save_settings() { $texts = ['oss.endpoint', 'oss.bucket', 'oss.instance_role', 'oss.domain', 'oss.prefix', 'moderation.close_mail_subject']; foreach ($texts as $k) { $v = trim((string)$post($k, '')); - // 对象键前缀留空会让对象键变成 "/2026/...",回落到出厂默认 'fb' - if ($k === 'oss.prefix' && $v === '') { fb_unset_setting($k); continue; } + // 这两个留空都有"出厂默认"兜底,必须删键而不是存空串: + // - oss.prefix 留空会让对象键变成 "/2026/...",默认是 'fb' + // - close_mail_subject 留空会让邮件标题变成空字符串, + // sprintf('') 出来的主题是空的,必须回落到默认模板 + if (($k === 'oss.prefix' || $k === 'moderation.close_mail_subject') && $v === '') { + fb_unset_setting($k); + continue; + } // RAM 角色留空 = 让程序自己去元数据服务探测,不写死一个空值 if ($k === 'oss.instance_role' && $v === '') { list($rOk, $rVal) = fb_oss_detect_instance_role(); @@ -711,8 +717,8 @@ fb_layout_head('管理后台', ['robots' => 'noindex,nofollow']);

站点信息