一、界面一致性

1. 按钮圆角统一

此前三套圆角并存:首页 hero 按钮 8px、站内按钮 2px、侧栏标签 999px 胶囊。

做法:新增 --btn-radius: 8px 变量,只作用于按钮类控件(登录按钮、导航项、汉堡按钮、弹窗关闭、下载按钮、文章标签、侧栏分类项、标签云、首页 hero 按钮与小标签)。卡片、输入框、代码块仍保持 --radius: 2px。

2. 当前分类高亮

侧栏「二级分类」给当前项加 is-active 与 aria-current="page":加深底色、名字加粗、左侧 3px 黑色竖条,和 hover 状态明确区分。打开「随笔」时高亮随笔,切到「日志」时自动跟随。

3. 区块标题统一

归档标题与左右侧栏标题原本各写一套:24px 无下划线、15px 带 10px 下划线、外加皮肤层再次覆盖。

现在合并为一条规则:16px / 600 字重 / 行高 1.5 / 下内边距 12px / 1px 下边框。三栏顶部内边距同为 40px,因此三条下划线严格落在同一条水平线上。

二、全局面包屑

新增 breadcrumb.php,由 header.php 在页头下方引入,全站自动生效:

  • 分类页:首页 / 博客 / 开发
  • 文章页:首页 / 博客 / 开发 / 文章标题
  • 独立页面:首页 / 注册
  • 首页(工作室版)不显示

分类祖先链通过 metas 表的 parent 字段回溯,最多 10 层,防止成环;链接统一用 Router::url 并传入 index,避免站点未开 rewrite 时 404。

多分类文章的分类选择顺序:命中模板的二级分类 → 第一个二级分类 → 插件解析的顶级分类 → 第一个分类。这样「教程 + 开发」这类文章不会错落到顶级分类。

三、右栏改为纯文字列表

右侧「本分类最新」不再输出封面,只显示标题 + 两行摘要:

  • 组件增加 $ccSideNoThumb 开关,开启时跳过封面查询(少一次 fields 表查询);
  • 摘要提取先剥离 Markdown 图片与链接语法,再做去标签,避免 ![alt](url) 的地址被当成正文截进摘要;
  • 摘要为空时不输出空行,条目高度自动收缩。

四、分类继承修复(CategoryCustomizer)

问题:文章页的皮肤取「第一个能命中 post 模板的分类」,侧栏却直接取「第一个分类」。多分类文章于是出现「有皮肤、没侧栏」,三栏退化成单栏。

修复一:侧栏起点与模板、CSS 同源,取第一个命中 post 模板的分类。

修复二:每页文章数沿父分类向上继承。此前子分类没配置条数时直接回落到全局 5 篇,而父分类配置的是 15 篇,导致同一栏目内每页条数不一致。

五、数据治理

20 篇技术文章同时挂在「教程」和「开发」下,造成两个栏目内容完全重复,且「教程」因排序值更小总是抢占文章的第一分类。

处理:解除这批文章与「教程」的关系(仅删分类关系,文章本体与分类本身都保留),并把该分类计数归零。文章现在只归属「开发」。

六、发布端加固

MCP 发布脚本增加保险:

  • TYPECHO_FORCE_CATEGORY(默认开启):忽略调用方传入的分类,只用配置里的 TYPECHO_CATEGORY;
  • 写入多个分类时回显警告,便于第一时间发现;
  • 参数说明收紧,明确分类由配置决定。

七、验证结果

  • 分类页:博客 / 随笔 / 开发 / 日志 均为 blog 皮肤 + 左右侧栏,每页 15 篇;
  • 文章页:开发、随笔文章均为三栏,面包屑层级正确;
  • 标题对齐:三个区块标题顶部与底部坐标完全一致;
  • 面包屑链接逐条校验,全部 200,无 404;
  • 工具 / 原创 / 喜欢三个栏目保持原样,无皮肤、无侧栏、每页 5 篇。