Docs 文档模式
1 | mode: docs |
形态特征
docs 模式是主题里结构最完整的一种形态,三栏布局,对应产品文档站的典型需求。
1 | ┌──────────────────────────────────────────────────────────┐ |
| 档位 | 布局 | 文档树 | 目录 |
|---|---|---|---|
| desktop | 三栏 | sticky 吸附左栏 |
sticky 吸附右栏 |
| tablet | 双栏 | inline 内联卡片 |
隐藏 |
| mobile | 单栏 | offcanvas 抽屉 + 悬浮按钮 |
正文顶部折叠面板 |
三步搭起来
第 1 步:切换模式
1 | mode: docs |
第 2 步:写文档页
每篇文档是一个独立的 Page(不是 Post):
1 | hexo new page docs/xfm/intro |
hexo new page 生成到 source/docs/xfm/intro/index.md,访问路径 /docs/xfm/intro/;hexo new post 会进 source/_posts/ 并出现在文章流里。文档树只识别页面,用错命令会导致侧边栏匹配不上。
每篇的 front-matter:
1 |
|
order 用于自动生成侧边栏时的排序(不定义数据文件时生效),也用于树里同级节点的顺序参考。
第 3 步:定义文档树
创建 source/_data/docs.yml:
1 | - title: 快速开始 |
字段:
| 字段 | 必填 | 说明 |
|---|---|---|
title |
是 | 节点显示文本 |
path |
分组节点可省 | 目标地址,必须与页面 URL 严格一致 |
children |
否 | 子节点数组,支持任意层级递归 |
兼容别名:name / url / permalink 等价于 title / path;items / sections 等价于 children。
不定义数据文件会怎样
当 source/_data/docs.yml 不存在(或为空)时,xfm_docs_nav() 自动降级:
- 取
site.pages(全部独立页面) - 过滤掉首页
- 按
order升序、同序按标题字典序排列 - 生成扁平侧边栏
1 | # 此时每篇文档只需要 |
内容少于 10 篇、不需要分组 → 直接靠 order 自动生成,零维护。
需要分组、需要控制层级、多人协作 → 显式写 docs.yml,结构清晰且可版本管理。
配置项
1 | docs: |
| 配置项 | 说明 |
|---|---|
data_file |
数据文件的键名。填 docs 读 _data/docs.yml;改为 manual 则读 _data/manual.yml |
expanded |
全部节点是否默认展开。关闭后只有 auto_expand 命中的分支展开 |
auto_expand |
当前页所在的分支自动展开(推荐保持开启) |
page_nav |
底部”上一章 / 下一章”导航 |
last_modified |
底部”最后更新于 YYYY-MM-DD” |
edit_link + edit_base |
底部”在 GitHub 上编辑此页”链接 |
toc |
右侧目录栏总开关 |
自动展开与高亮
树的渲染逻辑(renderNavNodes)对每个节点做两项判定:
is-active:节点path与当前页路径一致 → 加高亮is-open:节点的子孙中存在当前页 → 自动展开该分支
路径比较前会做归一化,因此下面几种写法都能正确匹配:
1 | 侧边栏写 /docs/xfm/intro/ |
侧边栏能显示,但点击后总是跳到首页,或者当前项不高亮。九成是 path 与实际 URL 不一致——多写/少写尾部斜杠一般没事(会被归一化),但**目录名拼错、忘了 /docs/ 前缀、或写成 docs/intro(缺前导斜杠)**都会失配。
上一章 / 下一章
layout/page.ejs 在 docs 模式下会遍历 docs.yml 的整棵树,按深度优先顺序拍平,然后取当前页的前后相邻项:
1 | docs.yml 顺序 |
因此树的顺序就是阅读顺序。想让读者按某个路径读完整个文档,调整 docs.yml 的节点次序即可,不需要在每篇里手工写”下一篇”。
这个导航基于 docs.yml 计算。若未定义数据文件,主题无法推知阅读顺序,底部翻页导航不会出现(page_nav 即使为 true 也无内容可渲染)。
编辑此页链接
想让读者一键跳转 GitHub 提 PR:
1 | docs: |
最终链接 = edit_base + page.source。以 source/docs/xfm/intro/index.md 为例:
1 | https://github.com/user/repo/edit/main/source/docs/xfm/intro/index.md |
文档树顶部
layout/_partials/docs/nav.ejs 会在树的顶部渲染:
- 一个标题行”文档目录”(文案取自
languages/zh-CN.yml的docs.sidebar) - 一个搜索按钮(受
search.enable控制),点击唤起全站搜索面板
手机档下,整块左栏收起为抽屉,由正文左下角的悬浮按钮”文档目录”唤起,点击链接后自动关闭。
一个可直接使用的配置
1 | mode: docs |
博客上”滚动隐藏导航栏”能提升沉浸感,但文档站的读者经常需要回导航或搜索。把 navbar.auto_hide 设为 false 更实用。
评论