修复图标显示不出来;标题改XX反馈系统;图标去掉背景色
一、图标显示不出来(根因) 用户上传图标时用的是修复前的代码,数据库里 icon_key 存的是 icons/2026/11/xxx.png —— 没有 local/ 也没有 oss.prefix 前缀。 上一轮我把键校验收紧成「必须带存储前缀」,于是这些键被判非法, fb_icon_url() 返回空字符串,图标自然显示不出来。 而三个文件其实都真实存在于 OSS 上(13KB / 391KB / 379KB)。 修法两层: 1. fb_icon_key_ok / fb_icon_is_key 兼容历史无前缀形态, 这些是有效资产,不能因为键格式不规范就让图标消失 2. 数据迁移:把对象复制到 feedlite/icons/… 并把数据库键改成规范形态, 已对三个软件全部执行并验证(新键 200,大小与源文件一致) 二、标题改为「XX 反馈系统」 - 页头大标题 = 同步日历反馈系统(之前只有「同步日历」) - 浏览器标签同步改 - 软件名本身含「反馈」时不叠加,避免「轻反馈反馈系统」 三、图标不要背景色 - 去掉色块底衬与圆角投影,直接「图标 + 文字」并排 - 前端 badge、提交页上下文条、邮件头部三处同步 - md 尺寸调到 28px,与 26px 标题文字视觉匹配 验证:三个软件页标题正确、图标全部 200 image/png、 全部页面 200、迁移后新键可读且大小一致。
This commit is contained in:
+30
-11
@@ -323,24 +323,26 @@ function fb_software_icon($software) {
|
||||
* 图标 + 名字的组合标签(HTML)。
|
||||
* 前端所有「这是哪个软件」的地方都用它,保证视觉一致。
|
||||
*
|
||||
* 🔴 不要背景色:图标本身就是一张图/一个 emoji,再垫一个色块反而糊在一起。
|
||||
* 直接「图标 + 文字」并排,识别度最高(用户 2026-11-03 明确要求)。
|
||||
*
|
||||
* @param array $sw 软件行
|
||||
* @param string $size 'sm' | 'md' | 'lg'
|
||||
*/
|
||||
function fb_software_badge($software, $size = 'md') {
|
||||
if (!is_array($software) || empty($software['name'])) { return ''; }
|
||||
list($c) = fb_software_colors($software);
|
||||
if ($c === '') { $c = '#0057B8'; }
|
||||
$icon = fb_software_icon($software);
|
||||
$name = (string)$software['name'];
|
||||
|
||||
$px = ['sm' => 20, 'md' => 26, 'lg' => 34];
|
||||
$fs = ['sm' => 11, 'md' => 14, 'lg' => 17];
|
||||
$box = isset($px[$size]) ? $px[$size] : 26;
|
||||
$fnt = isset($fs[$size]) ? $fs[$size] : 14;
|
||||
/* md 用于页头副行,要跟上方 26px 的标题文字视觉匹配,所以比 sm 明显大一档;
|
||||
* lg 只在大标题位置用(现在标题是纯文字,暂时没用到,留着备用)。 */
|
||||
$px = ['sm' => 18, 'md' => 28, 'lg' => 40];
|
||||
$fs = ['sm' => 14, 'md' => 19, 'lg' => 30];
|
||||
$box = isset($px[$size]) ? $px[$size] : 28;
|
||||
$fnt = isset($fs[$size]) ? $fs[$size] : 19;
|
||||
|
||||
/* 有上传的图标图片就用图片(管理员自己传的 logo),
|
||||
* 没有才退回「色块 + 字符」。两者的外框尺寸完全一致,
|
||||
* 换用图片不会让布局跳动。 */
|
||||
/* 有上传的图标图片就用图片(管理员自己传的 logo),没有才用字符。
|
||||
* 两者外框尺寸一致,换用图片不会让布局跳动。 */
|
||||
$imgKey = isset($software['icon_key']) ? trim((string)$software['icon_key']) : '';
|
||||
$imgUrl = $imgKey !== '' ? fb_icon_url($imgKey, $box * 2) : '';
|
||||
if ($imgUrl !== '') {
|
||||
@@ -353,12 +355,29 @@ function fb_software_badge($software, $size = 'md') {
|
||||
}
|
||||
|
||||
return '<span class="sw-badge sw-badge-' . e($size) . '">'
|
||||
. '<span class="sw-badge-ic" aria-hidden="true" style="width:' . $box . 'px;height:' . $box
|
||||
. 'px;background:' . e($c) . ';font-size:' . $fnt . 'px">' . e($icon) . '</span>'
|
||||
. '<span class="sw-badge-ic" aria-hidden="true" style="font-size:' . $fnt . 'px">'
|
||||
. e($icon) . '</span>'
|
||||
. '<span class="sw-badge-nm">' . e($name) . '</span>'
|
||||
. '</span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* 「XX 反馈系统」—— 当前软件下的站点标题。
|
||||
* 多软件共用一个反馈站时,标题必须点明是哪个软件的反馈系统,
|
||||
* 用户才知道自己没走错地方。没传软件时退回站点名。
|
||||
*
|
||||
* ⚠️ 软件名本身已含「反馈」二字时不再叠加,避免出现「轻反馈反馈系统」。
|
||||
*/
|
||||
function fb_software_site_title($software) {
|
||||
if (!is_array($software) || empty($software['name'])) {
|
||||
return (string)fb_cfg('site_name', '轻反馈');
|
||||
}
|
||||
$name = trim((string)$software['name']);
|
||||
if ($name === '') { return (string)fb_cfg('site_name', '轻反馈'); }
|
||||
if (mb_strpos($name, '反馈', 0, 'UTF-8') !== false) { return $name; }
|
||||
return $name . '反馈系统';
|
||||
}
|
||||
|
||||
/** 某软件下的分类;不传软件则返回空数组 */
|
||||
function fb_categories($softwareId = null, $onlyEnabled = true) {
|
||||
if ($softwareId === null) { return []; }
|
||||
|
||||
Reference in New Issue
Block a user