导航与目录

2026-09-18

文档站、书籍类站点需要章节目录与上下篇导航。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。