跳到主要內容
版本:3.5.2

使用多個側邊欄

你可以為每個Markdown 檔案組,建立一個側邊欄來將它們分組在一起

提示

Docusaurus 網站是使用多個側邊欄非常好的範例

考慮以下範例

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

瀏覽 doc1doc2 時,會顯示 tutorialSidebar;瀏覽 doc3doc4 時,會顯示 apiSidebar

沿用上述範例,如果兩個側欄都包含 commonDoc

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

瀏覽 commonDoc 時,Docusaurus 要如何判斷哪個側欄應該顯示?答案:它無法判斷,我們也沒有保證會選哪個側欄。

當你將文件 Y 新增到側欄 X 時,會建立雙向繫結:側欄 X 包含文件 Y 的連結,瀏覽文件 Y 時,會顯示側欄 X。不過,有時候我們會想要中斷任一隱含繫結

  1. 我要如何在側欄 X 中建立文件 Y 的連結,卻不讓側欄 X 在 Y 中顯示?例如,當我在多個側欄中包含文件 Y,如同上述範例,我希望明確告知 Docusaurus 顯示其中一個側欄時?
  2. 我要如何在瀏覽文件 Y 時顯示側欄 X,但側欄 X 不應該包含文件的連結?例如,當 Y 是「文件首頁」而側欄純粹用於導覽時?

Front Matter 選項 displayed_sidebar 會強制設定側欄關聯。以同樣的範例來說,你可以繼續使用文件簡寫,而無需任何特別設定

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

然後新增 Front Matter

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

這會明確告知 Docusaurus,在瀏覽 commonDoc 時,顯示 apiSidebar。使用相同的方法,你可以讓不包含文件 Y 的側欄 X 顯示在文件 Y 中

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

就算 tutorialSidebar 未包含 home 的連結,在檢視 home 時,它仍然會顯示。

如果你設定 displayed_sidebar: null,這頁將不會顯示任何側欄,且不會有分頁。

產生分頁

Docusaurus 使用側欄在每個文件頁面底部產生「下一個」和「上一個」分頁連結。它只使用已顯示的側欄:如果未關聯任何側欄,它也不會產生分頁。不過,「下一個」和「上一個」所連結的文件,並非保證會顯示相同的側欄:它們是包含在這個側欄中,但它們的 Front Matter 中,可能有不同的 displayed_sidebar

如果透過設定 displayed_sidebar Front Matter 來顯示側欄,而此側欄不包含文件本身,則不會顯示分頁。

你可以透過 Front Matter pagination_nextpagination_prev 來自訂分頁。請考慮下列側欄

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

「Windows」的分頁連結指向「Linux」,這並不合邏輯:您會希望讀者在安裝後開始「入門」。在此情況下,您可以手動設定分頁

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

# Installation on Windows

您也可以使用 `pagination_next: null` 或 `pagination_prev: null` 停用顯示分頁連結。

預設的分頁標籤,即側欄標籤。您可以使用 YAML 慣例 `pagination_label`,自訂文件在分頁中的顯示方式。

ref 類型與 doc 類型 在各方面都相同,唯一的例外是,它不會參與產生導覽元資料。它只會將自身註冊為連結。在 產生分頁顯示側欄 時,將會完全忽略 ref 項目。

當您希望從多個側欄連結到同一份文件時,這種做法特別有用。該文件僅屬於一個側欄(它註冊為 type: 'doc' 的側欄或自動產生目錄的側欄),但它的連結會出現在它註冊的所有側欄中。

考慮以下範例

sidebars.js
export default {
tutorialSidebar: {
'Category 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 會在分頁產生中被忽略)