跳到主要内容

使用多个侧边栏

您可以为每个您想要组合在一起Markdown 文件集合创建一个侧边栏。

提示

Docusaurus 站点是使用多个侧边栏的一个很好的例子:

考虑这个例子:

sidebars.js
export default {
tutorialSidebar: {
'类别 A': ['doc1', 'doc2'],
},
apiSidebar: ['doc3', 'doc4'],
};

浏览 doc1doc2 时,将显示 tutorialSidebar;浏览 doc3doc4 时,将显示 apiSidebar

按照上面的示例,如果 commonDoc 包含在两个侧边栏中:

sidebars.js
export default {
tutorialSidebar: {
'类别 A': ['doc1', 'doc2', 'commonDoc'],
},
apiSidebar: ['doc3', 'doc4', 'commonDoc'],
};

Docusaurus 如何知道在浏览 commonDoc 时显示哪个侧边栏?答案是:它不知道,我们不保证它会选择哪个侧边栏。

当您将文档 Y 添加到侧边栏 X 时,它会创建一个双向绑定:侧边栏 X 包含文档 Y 的链接,并且在浏览文档 Y 时,侧边栏 X 将被显示。但有时,我们希望打破这种隐式绑定:

  1. 如何在侧边栏 X 中生成文档 Y 的链接,而不使侧边栏 X 在 Y 上显示? 例如,当我在多个侧边栏中包含文档 Y(如上面的示例),并且我希望明确地告诉 Docusaurus 显示一个侧边栏?
  2. 如何在浏览文档 Y 时显示侧边栏 X,但侧边栏 X 不应包含 Y 的链接? 例如,当 Y 是"文档主页",并且侧边栏仅用于导航?

前置元数据选项 displayed_sidebar 将强制设置侧边栏关联。对于相同的示例,您仍然可以使用文档简写而无需任何特殊配置:

sidebars.js
export default {
tutorialSidebar: {
'类别 A': ['doc1', 'doc2'],
},
apiSidebar: ['doc3', 'doc4'],
};

然后添加前置元数据:

commonDoc.md
---
displayed_sidebar: apiSidebar
---

这明确地告诉 Docusaurus 在浏览 commonDoc 时显示 apiSidebar。使用相同的方法,您可以使不包含文档 Y 的侧边栏 X 出现在文档 Y 上:

home.md
---
displayed_sidebar: tutorialSidebar
---

即使 tutorialSidebar 不包含 home 的链接,它仍将在查看 home 时显示。

如果设置 displayed_sidebar: null,则此页面上不会显示任何侧边栏,随后也不会显示分页。

生成分页

Docusaurus 使用侧边栏在每个文档页面底部生成"下一页"和"上一页"分页链接。它严格使用显示的侧边栏:如果没有关联的侧边栏,它也不会生成分页。但是,作为"下一页"和"上一页"链接的文档不保证显示相同的侧边栏:它们包含在此侧边栏中,但在其前置元数据中可能有不同的 displayed_sidebar

如果通过设置 displayed_sidebar 前置元数据显示侧边栏,并且此侧边栏不包含文档本身,则不会显示分页。

您可以使用前置元数据 pagination_nextpagination_prev 自定义分页。考虑这个侧边栏:

sidebars.js
export default {
tutorial: [
'introduction',
{
installation: ['windows', 'linux', 'macos'],
},
'getting-started',
],
};

"windows"上的分页下一页链接指向"linux",但这没有意义:您希望读者在安装后进入"入门"。在这种情况下,您可以手动设置分页:

windows.md
---
pagination_next: getting-started
---

# Windows 安装

您还可以通过 pagination_next: nullpagination_prev: null 禁用显示分页链接。

默认情况下,分页标签是侧边栏标签。您可以使用前置元数据 pagination_label 自定义文档在分页中的显示方式。

ref 类型在每个方面都与 doc 类型相同,只是它不参与生成导航元数据。它只是注册自身为一个链接。在生成分页显示侧边栏时,ref 项目被完全忽略。

当您希望从多个侧边栏链接到同一文档时,它特别有用。文档只属于一个侧边栏(在那里注册为 type: 'doc' 或来自自动生成的目录),但其链接将出现在注册它的所有侧边栏中。

考虑这个例子:

sidebars.js
export default {
tutorialSidebar: {
'类别 A': [
'doc1',
'doc2',
{type: 'ref', id: 'commonDoc'},
'doc5',
],
},
apiSidebar: ['doc3', 'doc4', 'commonDoc'],
};

您可以将 ref 类型视为执行以下操作:

  • commonDoc 设置 displayed_sidebar: tutorialSidebarref 在侧边栏关联中被忽略)
  • doc2 设置 pagination_next: doc5,为 doc5 设置 pagination_prev: doc2ref 在分页生成中被忽略)