cm-geek 主题迭代记录:从骨架到全功能

本主题从最初的静态骨架迭代到如今的「编辑器能力 + 服务端渲染」体系,本文以版本日志形式记录每一次迭代的动机、方案与取舍。所有能力(目录、代码高亮、内联图表、分享、灯箱)均已随主题与文章存入站点,不依赖任何外部服务,长期可读。

一、版本总览

版本核心能力关键变化
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,永久可读。下图即本主题的版本演进示意:

版本演进
图1 · cm-geek 主题版本演进(累计功能模块数,示意)
v0.1 骨架 3 v0.2 分享高亮 5 v0.3 代码块 7 v0.4 搜索优化 9 v0.5 文章目录 11 v0.6 图表块 13 v0.7 灯箱时间戳 15 数据为迭代累计功能模块示意,非精确度量

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 主题迭代记录,版本号与功能对应关系以实际发布为准。

留下你的留言

本站支持游客留言,登录后留言可显示你的账号信息。