去掉软件标签的描边;修「全部问题」列表分类标签渲染成空
两个问题:
一、两个标签中间那道「线」
不是 CSS 分隔符 —— 是 .badge.sw(软件徽章)带 border:1px solid var(--swc-line),
而 .badge.cat / .badge.st 都没有边框。并排显示时那道描边看起来
就像凭空插了一条分隔线。去掉边框,三个标签统一为无边框胶囊。
二、反馈类型(Bug / 功能建议)在后台「全部问题」列表里不显示
🔴 根因:fb_category_label() 参数是**数字 id**,内部会 (int) 化。
而全部问题列表传的是 $t["category"](老 slug 字段,值为 bug),
(int)bug === 0 → 函数返回空串 → 渲染出一个**空的** badge:
标签框在、里面什么都没有,看起来就像「类型没了」。
修法:
- 新增 fb_category_label_by_slug($softwareId, $slug) 给老数据兜底
(slug 在不同软件下可能重名,必须带 software_id)
- 全部问题列表改用 category_id 优先、slug 兜底
- 前台列表同样处理,并且**取不到名字就不渲染这个标签**,
绝不再输出空胶囊
- 在 fb_category_label() 的注释里写明「必须传数字 id」,
避免下次再踩
验证:
函数对照跑通:#4 category_id=6 → Bug;#5 category_id=7 → 功能建议;
旧写法 fb_category_label("bug") → (空),确认这就是根因。
浏览器实测详情页三个标签 border-top-width 全部 0px / style none,
圆角都是 999px,描边已消除。
前台列表两个条目分类标签分别渲染出 Bug / 功能建议,不再是空。
7 个路由全 200。
This commit is contained in:
@@ -766,7 +766,17 @@ fb_layout_head('管理后台', ['robots' => 'noindex,nofollow']);
|
||||
</div>
|
||||
<div class="item-tags">
|
||||
<?php if ($aSw): ?><?php echo fb_software_chip($aSw); ?><?php endif; ?>
|
||||
<span class="badge cat"><?php echo e(fb_category_label($t['category'])); ?></span>
|
||||
<?php
|
||||
/* 🔴 这里必须用 category_id(数字),不能用 $t['category'](老 slug 字段)。
|
||||
* fb_category_label() 内部会把参数 (int) 化,传 'bug' 会变成 0 → 返回空串,
|
||||
* 结果就是渲染出一个**空的** <span class="badge cat"></span>。
|
||||
* 用户 2026-11-03 看到的就是「反馈类型没了」。
|
||||
* 优先 category_id,没有才回退 slug(老数据兼容)。 */
|
||||
$aCat = !empty($t['category_id'])
|
||||
? fb_category_label((int)$t['category_id'])
|
||||
: fb_category_label_by_slug((int)$t['software_id'], (string)$t['category']);
|
||||
?>
|
||||
<?php if ($aCat !== ''): ?><span class="badge cat"><?php echo e($aCat); ?></span><?php endif; ?>
|
||||
<span class="badge st st-<?php echo e($t['status']); ?>"><?php echo e(fb_status_label($t['status'])); ?></span>
|
||||
<?php if ((int)$t['visible'] !== 1): ?><span class="badge st st-closed">未公开</span><?php endif; ?>
|
||||
</div>
|
||||
|
||||
+4
-1
@@ -599,7 +599,10 @@ main.wrap{padding-top:24px; padding-bottom:40px; min-height:60vh}
|
||||
.badge.sw{
|
||||
display:inline-flex; align-items:center; gap:5px;
|
||||
background:var(--swc-soft, #eef2f8); color:var(--swc, #2b4a74);
|
||||
border:1px solid var(--swc-line, #cfdcee); font-weight:600;
|
||||
/* ⚠️ 不要加 border —— 用户 2026-11-03 指出「两个标签中间加个线干嘛」。
|
||||
* 分类/状态标签都没有边框,只有软件标签有,并排显示时那道描边
|
||||
* 看起来就像凭空插了一条分隔线。统一成无边框的胶囊。 */
|
||||
font-weight:600;
|
||||
padding:1px 9px 1px 6px;
|
||||
}
|
||||
.badge.sw .badge-sw-ic{
|
||||
|
||||
@@ -166,7 +166,15 @@ if (!$sw):
|
||||
<span class="item-id" title="问题编号">#<?php echo (int)$t['id']; ?></span>
|
||||
</div>
|
||||
<div class="item-tags">
|
||||
<span class="badge cat"><?php echo e(fb_category_label($t['category_id'])); ?></span>
|
||||
<?php
|
||||
/* 分类标签必须有名字才渲染 —— 否则会输出一个空胶囊(什么都看不见),
|
||||
* 用户会以为「反馈类型丢了」。老数据 category_id 可能为空,
|
||||
* 这时按 slug 兜底;两者都取不到才不显示。 */
|
||||
$lCat = !empty($t['category_id'])
|
||||
? fb_category_label((int)$t['category_id'])
|
||||
: fb_category_label_by_slug((int)$t['software_id'], (string)$t['category']);
|
||||
?>
|
||||
<?php if ($lCat !== ''): ?><span class="badge cat"><?php echo e($lCat); ?></span><?php endif; ?>
|
||||
<span class="badge st st-<?php echo e($t['status']); ?>"><?php echo e(fb_status_label($t['status'])); ?></span>
|
||||
</div>
|
||||
<p class="item-ex"><?php echo e(fb_excerpt($t['excerpt'], 120)); ?></p>
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ if (!defined('FB_ROOT')) {
|
||||
define('FB_ROOT', dirname(__DIR__));
|
||||
// 静态资源版本号:改 assets/ 下的 css/js 后把这个数字 +1,
|
||||
// 让浏览器与 CDN 缓存失效。全站只此一处,别再往页面里写死数字。
|
||||
if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 37); }
|
||||
if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 38); }
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
|
||||
+23
-1
@@ -486,7 +486,11 @@ function fb_category_by_slug($softwareId, $slug) {
|
||||
return $r ? $r : null;
|
||||
}
|
||||
|
||||
/** 分类显示名:只给 id 就能拿到名字(列表渲染用) */
|
||||
/** 分类显示名:只给 id 就能拿到名字(列表渲染用)
|
||||
*
|
||||
* ⚠️ 参数必须是**数字 id**。传字符串 slug(如 'bug')会被 (int) 成 0 而返回空串,
|
||||
* 调用方如果不判空就会渲染出一个空标签 —— 这个坑踩过(见 admin.php 全部问题列表)。
|
||||
* 需要按 slug 取名字请用 fb_category_label_by_slug()。 */
|
||||
function fb_category_label($id) {
|
||||
if (!$id) { return ''; }
|
||||
static $cache = [];
|
||||
@@ -498,6 +502,24 @@ function fb_category_label($id) {
|
||||
return $cache[$id];
|
||||
}
|
||||
|
||||
/**
|
||||
* 按「软件 + slug」取分类显示名 —— 给只存了老 slug 字段的历史数据兜底。
|
||||
* slug 在不同软件下可能重名,所以必须带上 software_id 才能定位。
|
||||
*/
|
||||
function fb_category_label_by_slug($softwareId, $slug) {
|
||||
$slug = trim((string)$slug);
|
||||
if ($slug === '') { return ''; }
|
||||
if ((int)$softwareId > 0) {
|
||||
$c = fb_category_by_slug((int)$softwareId, $slug);
|
||||
if ($c) { return (string)$c['name']; }
|
||||
}
|
||||
// 实在定不到软件(老数据 software_id 为空)时,按 slug 全局找一个
|
||||
$st = fb_db()->prepare('SELECT name FROM categories WHERE slug = ? LIMIT 1');
|
||||
$st->execute([$slug]);
|
||||
$nm = $st->fetchColumn();
|
||||
return $nm !== false ? (string)$nm : '';
|
||||
}
|
||||
|
||||
/** 全部状态(按排序) */
|
||||
function fb_statuses($onlyEnabled = true) {
|
||||
$sql = 'SELECT * FROM statuses';
|
||||
|
||||
Reference in New Issue
Block a user