文档站、书籍类站点需要章节目录与上下篇导航。everkm-publish 提供导航 Markdown 解析与 nav_tree 等内置函数;侧栏树、上下页按钮、顶栏/页脚链接等 UI 需主题支持,自定义主题须自行调用导航函数并实现布局。
主题支持
官方 theme-youlog 为参考实现:template: book 配合章节导航(约定 _nav.md 或 folders.query.nav_file)、stack 渲染侧栏与上下篇;config.header_nav、config.bottom_nav 控制顶栏与页脚。配置说明见主题目录 README。
约定:目录首页与 _nav.md
产品规则(零特殊配置即可用):
目录入口顺序:请求 URL 对应主题模板 →
index.md→_index.md→ 本目录同级_nav第一篇。入口降级不会上溯祖先_nav。侧栏 / 上下篇用的qs.nav_file可以祖先上溯。_nav本身不作为页面内容。目录默认页仅认index.md/_index.md/slug: index(不再把foo/foo.md同名页当作首页)。
| 场景 | 打开目录 URL(如 /docs/) | 侧栏 / 上下篇 |
|---|---|---|
主题有对应模板(如 paper 的 home / index.html) | 按请求 URL 交给主题模板渲染 | 若有 _nav 仍可注入侧栏 |
无对应模板,有 index.md / _index.md | 渲染该首页(index.md 优先于 _index.md) | 若祖先链存在 _nav.md(或显式 nav_file),引擎注入后主题可显示 |
无模板、无首页,本目录有 _nav.md + 章节 | 渲染该导航中第一篇可解析站内正文 | 有 |
无模板、无首页,仅有祖先 _nav(本目录无) | 无目录入口(不会跳到全书第一章) | 打开其它页时仍可注入祖先 _nav |
无模板、无正文候选、无同级可用 _nav | 无目录入口 | 无 |
说明:
_nav.md只做目录结构,不会被当成页面正文渲染。- 入口 vs 导航:用
_nav顶目录首页时,只认同级文件;子目录文章继承祖先_nav仅影响侧栏(写入qs.nav_file),不改变「打开该子目录 URL 看见谁」。 - 目录入口会先试渲染主题模板;仅「页不存在」时落到
index/ 同级_nav(升级中的旧主题仍可按缺页文案识别);模板真错误会直接失败,不会被入口降级掩盖。 - 导航发现(
qs):显式folders.*.query.nav_file优先;否则从当前目录起沿祖先向上查找_nav.md(一书放在根目录、章节在子目录即可)。 - 仅支持约定导航文件名
_nav.md(不自动识别SUMMARY.md)。 - 子目录下的文章也会继承祖先
_nav,并写入页面qs.nav_file供主题读取(已有显式配置时不覆盖)。
书籍目录文件
在内容目录(或 book 根)放置 _nav.md,用列表 + 内链组织章节:
# 使用指南
* [[quick-start]]
* [[dir-config]]
* [[everkm-markdown]]
# 进阶
* [[custom-template]]
列表项使用毓知内链 [[页面名]] 或 [[路径/文件]],规则见 链接与内链。
在 everkm.yaml 中覆盖(可选)
多数站点只需在 book 根放置 _nav.md。需要自定义路径或共用一份导航时,再写 folders.query.nav_file:
folders:
"/docs/":
template: book.html
query:
nav_file: /docs/_nav.md
stack: true
query 字段 | 说明 |
|---|---|
nav_file | 可选。章节目录 Markdown 的路径(站点内绝对路径)。优先于约定 _nav.md |
stack | 主题相关:切换书籍布局(如 youlog 的顶栏 + 侧栏),见 theme-youlog |
未发现导航源时,主题通常不显示树形导航与上下篇按钮。
模板中的导航函数
主题模板(Tera)或 JsRender 可调用内置函数解析同一导航文件:
{{ nav_tree(from_file="[[./_nav.md]]") | json_encode }}
{{ nav_path(from_file="[[./_nav.md]]") }}
{{ nav_indicator(from_file="[[./_nav.md]]") }}
from_file 支持 [[...]] 内链语法,与正文内链规则一致。详见 链接与内链、内置函数、内置函数、内置函数。
面包屑
站点级面包屑在 folders.breadcrumbs 中配置,与导航树独立:
folders:
"/docs/":
breadcrumbs:
- title: "@i18n:nav.docs"
url: /docs/
合并规则见 目录配置。
顶栏与页脚链接
站点顶栏、页脚导航由 config.header_nav、config.bottom_nav 等控制,写在 everkm.yaml 的 config 下,需主题读取并渲染。youlog 示例见 theme-youlog。