本主题从最初的静态骨架迭代到如今的「编辑器能力 + 服务端渲染」体系,本文以版本日志形式记录每一次迭代的动机、方案与取舍。所有能力(目录、代码高亮、内联图表、分享、灯箱)均已随主题与文章存入站点,不依赖任何外部服务,长期可读。
一、版本总览
| 版本 | 核心能力 | 关键变化 |
|---|---|---|
| v0.1 | 主题骨架 | 响应式布局、导航、卡片式列表 |
| v0.2 | 分享 + 高亮 | 全平台分享按钮、代码语法高亮 |
| v0.3 | 代码块 | Gutenberg 动态块 cm-geek/code,编辑器内可写 |
| v0.4 | 搜索优化 | 结果去重、移动端放大镜、加载提速 |
| v0.5 | 文章目录 | 服务端渲染 + PC 侧边栏 + 移动端抽屉 |
| v0.6 | 图表块 | cm-geek/chart 内联 SVG,随文入库不失效 |
| v0.7 | 灯箱 + 时间戳 | 全站图片点击放大、发布秒级时间戳 |
二、关键迭代
v0.1 主题骨架
确立 cm-geek 的基础视觉与布局:顶部导航 + 卡片流列表 + 单篇阅读页,使用 CSS 变量统一配色,移动端优先的栅格。这一阶段解决的是「长得像博客、读得舒服」。
v0.2 分享与高亮
为文章页加入 X / 微博 / QQ / Facebook / LinkedIn / Telegram / Reddit / 邮件 / 复制链接 等分享入口;同时引入代码高亮(hljs),让技术文章中的代码片段可读。
v0.3 代码块
将代码高亮封装为 Gutenberg 动态块 cm-geek/code:编辑器内填写代码与语言,前端由块渲染并高亮,支持一键复制。动态块输出不经内容过滤,代码原样展示。示例:
# cm-geek 动态块注册示例(functions.php 节选)
def register_blocks():
blocks = [
"cm-code", # 代码高亮块
"cm-toc", # 文章目录块(服务端渲染)
"cm-chart", # 内联 SVG 图表块
]
for b in blocks:
register_block_type(f"blocks/{b}")
v0.4 搜索与加载优化
搜索结果按标题去重、移动端放大镜交互优化,并通过精简脚本依赖与内联核心 JS 减少首屏请求。本阶段开始确立「关键能力尽量服务端直出」的工程原则。
v0.5 文章目录
目录从客户端 JS 生成改为 服务端渲染:PHP 在输出前提取 H2/H3/H4 标题、生成中文锚点并写入列表,无 JS 也完整可见。随后升级为 PC 右侧 sticky 侧边栏 + 移动端抽屉,滚动高亮当前章节。本版还修复了数字开头锚点(如 #2-1-…)点击无效的问题——querySelector 对数字开头的 id 会抛 CSS 解析异常,改用 getElementById 后所有层级跳转正常。
v0.6 图表块
新增 cm-geek/chart 动态块,SVG 图表以文章内容形式写入数据库,渲染层原样输出——不依赖任何图表 CDN,永久可读。下图即本主题的版本演进示意:
v0.7 灯箱与时间戳
全站图片(含外站 URL)点击全屏放大,支持双击缩放、ESC/遮罩关闭;文章与列表统一展示 秒级发布时间戳(Y-m-d H:i:s),新发布文章自动携带。
三、技术要点
目录锚点一致性验证脚本(服务端直出,目录条目数与正文标题 id 一一对应,0 失效):
# 验证目录锚点一致性(服务端直出,无需 JS)
curl -sk https://cm.zy1080.xyz/文章/ | grep -c 'cm-toc-item'
四、后续规划
- 目录侧栏支持「回到顶部」与阅读进度条
- 灯箱增加手势捏合缩放与左右切换相册
- 文章页结构化数据(Article / Breadcrumb)输出
- 页面级缓存与静态化(可选性能项)
本文为 cm-geek 主题迭代记录,版本号与功能对应关系以实际发布为准。