Skip to Main Content
404Back to Top

24 June 2026, 22:00 (CST)

2026年06月24日 09:40(东八区 / 北京时间)

看板线上缺失排查 · Ametrine 子模块更新 · 新文章卡片样式

概述

本轮三件事:周计划看板本地/线上一致性排查Ametrine 主题子模块更新到 6d1c244(New article card design)Debug 专栏应用两种文章卡片样式。看板本地可用 zola build / zola serve;正式部署推荐 ./build-site.sh(含看板产物校验)。


1. 看板列表仅显示 1 张卡片

1.1 问题

环境/kanban/ 列表/kanban/2026-06-16/ 明细
本地 public/2 张卡片可打开
线上 gh-pages1 张卡片404

1.2 排查流程(源码 → 构建)

阶段 A:源码

检查项本地 00BlogZolaCodeberg content/kanban/
2026-06-16.md
2026-06-22.md
week_start / week_end均已配置一致

结论:源码两侧一致,问题不在 Markdown 缺失。

阶段 B:构建产物

检查项本地 public/kanban/GitHub gh-pages/kanban/
index.html.kanban-week-card21
data-json 热力图条目2 条1 条
2026-06-16/index.html✓ 存在不存在
2026-06-22/index.html

结论:线上 gh-pages 是旧/不完整部署,并非前端 JS 把第二张卡片藏起来——HTML 里根本没有第二张卡片,明细页目录也未生成,手动输入 URL 必然 404。

1.3 根因

线上 gh-pages 某次部署产物不完整(缺少 2026-06-16/ 目录与列表第二张卡片),与本地是否使用 ./build-site.sh 无直接关系——GitHub Actions 同样只跑 zola build,看板理论上应能完整生成。部署流水线原先缺少 kanban 产物校验,异常未能被及时发现。

1.4 修复

文件改动
scripts/verify-kanban-build.mjs对比 content/kanban/20*.md 数量与 public/kanban/*/index.html、列表卡片数
build-site.sh构建末尾调用 verify
.github/workflows/deploy_pages.yml改用 ./build-site.sh + submodule init + verify

重新部署后(GitHub → Actions → Build Zola and Deploy to GitHub Pages → Run workflow),线上应出现 2 张卡片且 /kanban/2026-06-16/ 可访问。

1.5 补充:本地为何只用 zola build / zola serve 就能完整实现看板?

日常开发若只用 zola buildzola serve不主动跑 ./build-site.sh,看板依然完整——这是预期行为,因为看板整条链路都在 Zola 原生构建内,不依赖 build-site.sh 额外步骤。

zola build 已覆盖看板所需:

content/kanban/*.md
    ↓  Zola 读取 front matter(week_start、stats…)
templates/kanban_list.html / kanban.html
    ↓  load_data 内嵌原始 Markdown 到 HTML
static/js/kanban-*.js
    ↓  浏览器解析、渲染热力图 / Trello 看板
public/kanban/

列表页与明细页模板在构建时load_data 把 Markdown 写进 HTML(无需 static/kanban/ 副本):

只要 content/kanban/ 下有带 week_start.mdzola build 就会生成对应页面与列表卡片;zola serve 仅本地预览 public/

build-site.sh 在四步中,看板只依赖第 ② 步:

步骤脚本作用看板是否需要
encrypt-content.mjs[extra.encryption] encrypt = true 的文章生成 static/encryption/pages/*.json — kanban 未开加密
zola build生成全部静态页 — 看板全靠这步
patch-search-index.mjs修补 elasticlunr 搜索索引
verify-kanban-build.mjs对比源码周数与构建卡片数 — 仅部署前防回归

何时才需要 ./build-site.sh

场景推荐命令
本地调试看板、普通文章zola serve(或先 zola build
本地调试加密文章详情需先跑 ①,或直接 ./build-site.sh
正式部署./build-site.sh(加密 + 搜索 + 看板校验)

与「线上少一张看板」的关系(再强调):

本地 zola build线上 gh-pages(问题当时)
源码2 个 kanban .mdCodeberg 同样 2 个 ✓
产物public/kanban/ 含 2026-06-16 + 2026-06-22仅 2026-06-22,2026-06-16 目录缺失

结论:看板 = Zola 模板 + content + static JS,zola build 已足够;build-site.sh 是站点其他能力(加密、搜索、部署校验)的包装,不是看板运行的前提。 线上问题来自 gh-pages 部署产物不完整,而非本地少用了 build-site.sh


2. Ametrine 子模块更新

cd themes/ametrine
git fetch origin main
git checkout main && git pull
# 父仓库记录新 commit
git add themes/ametrine
项目
远程codeberg.org/daudix/ametrine
目标 commit6d1c244New article card design
参考效果daudix.one/blog

主要变化:templates/partials/article_list.html 卡片布局(banner 缩略图置顶)、article_details.html 元数据分行、_article-list.scss 渐变/accent 视觉。


3. 两种文章卡片样式如何引用

Ametrine 通过 front matter 组合决定卡片形态(与 daudix 博客 一致):

样式 A — 带横幅图(has-banner + has-accent-color

列表卡片顶部有大图;明细页开头base.html#banner 渲染同目录图片。

[extra]
accent_color = ["hsl(210 25% 34%)", "hsl(210 31% 53%)"]  # 浅色 / 深色各一组 HSL
banner = "banner.jpg"           # 与 index.md 同目录
banner_position = "50% 40%"     # 可选,缩略图裁剪焦点

本站示例(Debug 专栏):

文章目录
Mac Chrome ReOpen02Engineer_blog_Debug/2026-06-23-Chrome-ReOpen/
VPN 断网排查02Engineer_blog_Debug/2026-06-20-VPN-noNet/

样式 B — 纯 accent 渐变(has-accent-color,无 banner)

无列表缩略图;可展示 发布日 + 更新日 + 作者 等元数据行。

updated = 2026-06-21          # 与 date 不同则显示「更新」图标
authors = ["SuchaharCan"]     # 可选,显示 By …

[extra]
accent_color = ["hsl(145 22% 34%)", "hsl(145 28% 50%)"]
# 不写 banner

本站示例:

文章特征
Little Snitch 教程仅 accent + updated
One (Teardown)accent + authors

明细页横幅

只要设置了 banner列表与明细共用同一字段;明细页无需额外模板,主题 base.html 自动在正文前插入 #banner 大图(与 daudix 一致)。

accent_color 格式


4. 本地验证

看板调试可直接:

zola build && zola serve

正式部署或需加密/搜索/校验时:

./build-site.sh
# 期望输出:kanban verify OK: 2 week(s), list cards match
页面检查
/kanban/2026 年 6 月分组下 2 张卡片
/kanban/2026-06-16/Trello 五列看板
/02Engineer_blog_Debug/2 张带图卡片 + 2 张纯渐变卡片
/02Engineer_blog_Debug/chrome-reopen/顶部 banner 大图

相关链接:看板列表 · Debug 专栏 · Ametrine 主题 · daudix 博客卡片参考


5. 看板列表卡片 UI · 热力图「今天 / 本周」标记

5.1 看板周卡片(列表页)

需求: 元数据参考 Ametrine 文章详情图标盒式风格;标题以下第二、三行加粗并居中;字号随卡片高度变化;天数跨度与卡片高度的视觉区分需更明显。

模板结构templates/kanban_list.html):

h3 标题(左对齐 + accent 竖线)
└─ .kanban-week-body(居中容器)
   ├─ .kanban-week-meta-row  日期 / 剩余 / 进度 / 星级
   └─ .kanban-week-stats      共 N 项 · 已完成 · 待办 · 进行中
└─ .kanban-week-span-spacer  (flex 占位,不再重复叠加高度)

样式要点sass/kanban/style.scss):

实现
图标恢复 Ametrine .icon 盒式:box-shadow + 圆角背景 + accent-color
元数据加粗.kanban-week-meta-row.kanban-week-statsfont-weight: 600
居中.kanban-week-body + justify-content: center
字号联动font-size: calc(0.78rem × var(--kanban-meta-scale)),图标同理
卡片高度单一变量 --kanban-card-body-height,去掉「基础高度 + spacer 再叠一层」

高度 / 字号映射(SSR 与 JS 共用同一公式,static/js/kanban-rules.jsapplyListCardMetrics):

--kanban-card-body-height = 88px + 280px × (span_days / 7)
--kanban-meta-scale       = 0.85 + 0.35 × (span_days / 7)
看板跨度卡片高度meta-scale
2026-06-222 天168px0.95
2026-06-167 天368px1.20

kanban-list.jskanban-heatmap.js 筛选后均调用 KanbanRules.applyListCardMetrics(),避免两套算法不一致。

CSS 变量:root):

--kanban-week-body-min: 88px;
--kanban-week-span-height: 280px;

若需进一步拉大/缩小高度差,优先调 --kanban-week-span-height

5.2 热力图「今天 / 本周」标记

需求: 全年视图(周格子)与单月视图(天格子)下方,用空心三角标出当前周或当天;时区与站点一致;不破坏现有热力图样式。

时区: 读取 #kanban-week-listdata-timezone(来自 zola.tomlextra.timezone,当前 Asia/Shanghai),复用 KanbanRules.clockInTimezone

显示规则:

视图标记位置显示条件
全年(周格)对应周格子下方所选年份 = 今年,且该周包含今天
单月(天格)对应天格子下方所选年/月 = 当前年/月,且该格 = 今天

DOM 结构:

.kanban-heatmap-week-slot / .kanban-heatmap-day-slot
├─ button.heatmap-week-cell / .heatmap-day-cell
└─ span.kanban-heatmap-today-marker   ← 仅 .is-current 时可见

样式static/css/heatmap.css,仅作用于 Kanban 热力图):

涉及文件:

文件改动
static/js/kanban-heatmap.jsgetTodayContextwrapWeekCellwrapDayCell
static/css/heatmap.css.kanban-heatmap-today-marker 及 slot 布局

5.3 本地验证(看板 UI + 热力图)

页面检查
/kanban/ 首次打开年份 = 当前年、月份 = 当前月(日视图 + 当月卡片)
/kanban/ 全年6 月对应周格下方有空心上三角;2 天 / 7 天卡片高度差明显
/kanban/ 选 6 月24 日格下方有标记;元数据两行居中加粗
切换年份非当前年不显示周标记
zola build && zola serve
# 打开 http://127.0.0.1:1111/kanban/

5.4 热力图默认选中当前年 / 当前月

需求: 进入 /kanban/ 时,右上角年份、月份下拉不再默认「最近有数据的年份 + 全年」,而是直接落在当前年、当前月(按站点时区),省去手动切换。

默认逻辑static/js/kanban-heatmap.jsinit()):

var todayCtx = getTodayContext(siteTimezone());
var activeYear = years.indexOf(todayCtx.year) >= 0 ? todayCtx.year : years[0];
var activeMonth = activeYear === todayCtx.year ? todayCtx.month : 0;
情况年份月份
当前年有看板数据当前年当前月(日视图热力图 + 当月卡片列表)
当前年无数据,回退到最近年份years[0]0(全年)

时区: 与 §5.2 相同,读 #kanban-week-listdata-timezonezola.tomlextra.timezone)。

未改动的交互: 用户手动切换年份时,月份仍会重置为「全年」(原有行为);仅首次加载默认当前年/月。

验证: 刷新 /kanban/,右上角应显示「年份: 2026」「月份: 6 月」,热力图为按天网格,下方列表为 6 月卡片,无需再点选月份。

最后补充: 优先 使用 Codeberg中的 workflow.此处是 第一源 ,同步给 github

24 June 2026, 18:00 (CST)