集合
集合是將相關內容分組的好方法,例如團隊成員或研討會中的演講。
設定
若要使用集合,您首先需要在 _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/_drafts
和 my_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(如果存在)以及下列資訊
變數 | 說明 |
---|---|
|
您的集合名稱,例如 |
|
一個 文件 陣列。 |
|
集合中的靜態檔案陣列。 |
|
集合來源目錄的路徑,相對於網站來源。 |
|
集合來源目錄的完整路徑。 |
|
集合文件是否會輸出為個別檔案。 |
硬式編碼集合
除了您自己建立的任何集合之外,posts
集合也已硬式編碼到 Jekyll 中。無論您是否有 _posts
目錄,它都存在。在反覆處理 site.collections
時,這一點很值得注意,因為您可能需要將其篩選出來。
您可能想使用篩選器來尋找您的集合:{{ site.collections | where: "label", "myCollection" | first }}
集合和時間
除了硬編碼預設集合 posts
中的文件外,您建立的所有集合中的文件,都可以透過 Liquid 存取,不論它們是否指定日期,因此可以渲染。
只有當相關集合的元資料有 output: true
時,才會嘗試將文件寫入磁碟。此外,只有當 site.future
也為真時,才會寫入未來日期的文件。
透過在文件的開頭設定 published: false
(預設為 true
),可以更精細地控制寫入磁碟的文件。
文件
除了在文件對應檔案中提供的任何開頭外,每個文件都有下列屬性
變數 | 說明 |
---|---|
|
文件的(未渲染)內容。如果沒有提供開頭,Jekyll 就不會在您的集合中產生檔案。如果使用開頭,這將是開頭的終止符號 `---` 之後檔案的所有內容。 |
|
文件的渲染輸出,根據 |
|
文件的來源檔案的完整路徑。 |
|
文件的來源檔案相對於網站來源的路徑。 |
|
渲染集合的 URL。只有當它所屬的集合在網站設定中具有 |
|
文件的集合名稱。 |
|
文件的集合日期。 |