集合

集合是將相關內容分組的好方法,例如團隊成員或研討會中的演講。

設定

若要使用集合,您首先需要在 _config.yml 中定義它。例如,以下是員工成員的集合

collections:
  - staff_members

在此情況下,collections 被定義為序列(即陣列),且未為每個集合定義額外的元資料。您可以選擇透過將 collections 定義為對應(即雜湊映射)而非序列,並在其中定義額外欄位,來指定集合的元資料

collections:
  staff_members:
    people: true

在將集合定義為序列時,其頁面預設不會被渲染。若要啟用此功能,必須在集合中指定 output: true,這需要將集合定義為對應。如需更多資訊,請參閱 輸出 區段。

收集您的集合3.7.0

您可選擇指定一個目錄來儲存所有集合,方法是使用 collections_dir: my_collections

接著,Jekyll 會在 my_collections/_books 中尋找 books 集合,並在 my_collections/_recipes 中尋找 recipes 集合。

務必將草稿和文章移至自訂集合目錄

如果您指定一個目錄來儲存所有集合,方法是使用 collections_dir: my_collections,則您需要將 _drafts_posts 目錄移至 my_collections/_draftsmy_collections/_posts。請注意,您的集合目錄名稱不能以底線 (`_`) 開頭。

新增內容

建立一個對應的資料夾(例如 <source>/_staff_members),然後新增文件。如果存在前置事項,則會處理前置事項,而前置事項之後的所有內容都會推送到文件的 content 屬性。如果沒有提供前置事項,Jekyll 會將其視為 靜態檔案,而內容不會進行進一步處理。如果提供了前置事項,Jekyll 會將檔案內容處理成預期的輸出。

不論是否存在前置事項,Jekyll 僅會寫入目標目錄(例如 _site),前提是已在集合的元資料中設定 output: true

例如,以下是將員工新增到上述集合設定的方式。檔案名稱為 ./_staff_members/jane.md,內容如下

---
name: Jane Doe
position: Developer
---
Jane has worked on Jekyll for the past *five years*.

請注意,儘管在內部被視為集合,但上述內容不適用於 文章。即使不包含前置事項,具有有效檔案名稱格式的文章也會標記為要處理。

務必正確命名您的目錄

資料夾必須與在 _config.yml 檔案中定義的集合同名,並在前面加上 _ 字元。

輸出

現在您可以在頁面上反覆運算 site.staff_members,並輸出每位員工的內容。與文章類似,文件主體是使用 content 變數存取的

{% for staff_member in site.staff_members %}
  <h2>{{ staff_member.name }} - {{ staff_member.position }}</h2>
  <p>{{ staff_member.content | markdownify }}</p>
{% endfor %}

如果您希望 Jekyll 為您的集合中的每個文件建立一個已呈現的頁面,您可以在 _config.yml 中的集合元資料中將 output 鍵設定為 true

collections:
  staff_members:
    output: true

您可以使用 url 屬性連結到已產生的頁面

{% for staff_member in site.staff_members %}
  <h2>
    <a href="{{ staff_member.url }}">
      {{ staff_member.name }} - {{ staff_member.position }}
    </a>
  </h2>
  <p>{{ staff_member.content | markdownify }}</p>
{% endfor %}

有特別的 集合永久連結變數 可以協助您控制整個集合的輸出網址。

自訂文件排序4.0

預設情況下,當集合中的兩個文件在 front matter 中都有 date 鍵時,會依據 date 屬性對它們進行排序。但是,如果任一文件或兩個文件都沒有在 front matter 中設定 date 鍵,它們會依據各自的路徑進行排序。

您可以透過集合的元資料控制此排序。

依據 front matter 鍵排序

可以透過將 sort_by 元資料設定為 front matter 鍵字串,依據 front matter 鍵對文件進行排序。例如,要依據鍵 lesson 對教學課程集合進行排序,設定會如下所示

collections:
  tutorials:
    sort_by: lesson

文件會依照 key 值的遞增順序排列。如果文件沒有定義 front matter key,則該文件會在已排序文件後立即置入。如果有多個文件沒有定義 front matter key,這些文件會依據日期或路徑排序,然後置入在已排序文件後。

手動排序文件

您也可以透過設定 order metadata,並在其中列出以所需順序排列的檔案名稱,來手動排序文件。例如,一系列教學課程會設定為

collections:
  tutorials:
    order:
      - hello-world.md
      - introduction.md
      - basic-concepts.md
      - advanced-concepts.md

任何檔案名稱與清單項目不符的文件,會在已重新排列的文件後置入。如果文件巢狀在子目錄中,也請將它們包含在項目中

collections:
  tutorials:
    order:
      - hello-world.md
      - introduction.md
      - concepts/basics.md
      - concepts/advanced.md

如果兩個 metadata key 都已正確定義,order 清單會優先。

Liquid 屬性

集合

集合也會在 site.collections 中提供,其中包含您在 _config.yml 中指定的 metadata(如果存在)以及下列資訊

變數 說明

標籤

您的集合名稱,例如 my_collection

文件

一個 文件 陣列。

檔案

集合中的靜態檔案陣列。

相對目錄

集合來源目錄的路徑,相對於網站來源。

目錄

集合來源目錄的完整路徑。

輸出

集合文件是否會輸出為個別檔案。

硬式編碼集合

除了您自己建立的任何集合之外,posts 集合也已硬式編碼到 Jekyll 中。無論您是否有 _posts 目錄,它都存在。在反覆處理 site.collections 時,這一點很值得注意,因為您可能需要將其篩選出來。

您可能想使用篩選器來尋找您的集合:{{ site.collections | where: "label", "myCollection" | first }}

集合和時間

除了硬編碼預設集合 posts 中的文件外,您建立的所有集合中的文件,都可以透過 Liquid 存取,不論它們是否指定日期,因此可以渲染。

只有當相關集合的元資料有 output: true 時,才會嘗試將文件寫入磁碟。此外,只有當 site.future 也為真時,才會寫入未來日期的文件。

透過在文件的開頭設定 published: false預設為 true),可以更精細地控制寫入磁碟的文件。

文件

除了在文件對應檔案中提供的任何開頭外,每個文件都有下列屬性

變數 說明

content

文件的(未渲染)內容。如果沒有提供開頭,Jekyll 就不會在您的集合中產生檔案。如果使用開頭,這將是開頭的終止符號 `---` 之後檔案的所有內容。

輸出

文件的渲染輸出,根據 content

path

文件的來源檔案的完整路徑。

relative_path

文件的來源檔案相對於網站來源的路徑。

url

渲染集合的 URL。只有當它所屬的集合在網站設定中具有 output: true 時,檔案才會寫入目的地。

collection

文件的集合名稱。

date

文件的集合日期。