集合是将相关内容分组的好方法,例如团队成员或会议上的会谈。
Setup
要使用集合,您首先需要在 _config.yml
中定义它。例如,这里有一个 staff members 的集合:
collections:
- staff_members
在这种情况下,collections
被定义为一个序列(即数组),没有为每个集合定义额外的元数据。您可以选择为集合指定元数据,方法是将 collections
定义为映射(即hashmap)而不是序列,然后在其中定义其他字段:
collections:
staff_members:
people: true
注意:
将集合定义为序列时,默认情况下不会渲染其页面。要启用此功能,必须在集合上指定 output: true
,这需要将集合定义为映射。有关更多信息,请参阅 Output 一节。
Gather your collections(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
。请注意,集合目录的名称不能以下划线 (_
) 开头。
Add content
创建相应的文件夹(例如 <source>/_staff_members
)并添加文档。如果 front matter 存在,则处理 front matter ,并且 front matter 之后的所有内容都被推送到文档的 content
属性中。如果没有提供 front matter ,Jekyll将认为它是一个静态文件,内容将不会经过进一步处理。如果提供了 front matter ,Jekyll将把文件内容处理成预期的输出。
无论 front matter 是否存在,只有在集合的元数据中设置了 output: true
时,Jekyll才会写入目标目录(例如 _site
)。
例如,以下是如何将一名 staff member 添加到上面的集合中。文件名为 ./_staff_members/jane.md
,包含以下内容:
---
name: Jane Doe
position: Developer
---
Jane has worked on Jekyll for the past *five years*.
请注意,尽管在内部被认为是一个集合,但以上内容并不适用于 posts 。具有有效文件名格式的文章将被标记为正在处理,即使它们不包含 front matter 。
请确保正确命名目录
文件夹的名称必须与您在 _config.yml
文件中定义的集合相同,并添加前面的 _
字符。
Output
现在,您可以在页面上迭代 site.staff_members
,并输出每个 staff member 的内容。与文章类似,使用 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 %}
Permalinks
集合有一些特殊的 permalink 变量 ,可以帮助您控制整个集合的输出 url 。
自定义文档排序(4.0)
默认情况下,当集合中的两个文档的 front matter 都有 date
"键"时,它们将按 date
属性进行排序。但是,如果其中一个或两个文档的 front matter 都没有 date
“键”,则会按各自的路径进行排序。
您可以通过集合的元数据来控制这种排序。
按照 Front Matter "键"排序
通过将 sort_by
元数据设置为 front matter "键"字符串,可以基于 front matt “键"对文档进行排序。例如,要根据"键” lesson
对教程集合进行排序,配置为:
collections:
tutorials:
sort_by: lesson
这些文档是按照"键"值的递增顺序排列的。如果一个文档没有定义 front matter “键”,那么该文档将立即放置在排序后的文档之后。当多个文档没有定义 front matter "键"时,这些文档将按其日期或路径进行排序,然后立即放置在排序后的文档之后。
手动排序文档
您也可以通过设置 order
元数据来手动排序文档,其中文件名按所需顺序列出。例如,教程集合将配置为:
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
如果两个元数据"键"都已正确定义,则 order
列表优先。
Liquid Attributes
Collections
可以通过 site.collections
获取 Collections ,元数据(您在_config.yml
中指定的(如果存在))和以下信息:
Variable | Description |
---|---|
| The name of your collection, e.g. |
| An array of documents. |
| An array of static files in the collection. |
| The path to the collection's source directory, relative to the site source. |
| The full path to the collections's source directory. |
| Whether the collection's documents will be output as individual files. |
========================================== |
硬编码集合
除了您自己创建的任何集合外,posts
集合在Jekyll中是硬编码的。无论是否有_posts
目录,它都存在。在迭代site.collections
时需要注意这一点,因为您可能需要将其过滤掉。
您可能希望使用筛选器来查找您的集合:{{ site.collections | where: "label", "myCollection" | first }}
集合与时间
除了硬编码的默认的集合 posts
中的文档外,您创建的集合中的所有文档都可以通过 Liquid 访问,无论其指定的日期(如果有的话)如何,因此都是可渲染的。
只有当相关的集合元数据拥有 output: true
时,才会尝试将文档写入磁盘。此外,只有在 site.future
也是 true 的情况下,才会写入 future-dated 文档。
可以通过在文档的 front matter 设置 published: false
(默认为 true
)来对写入磁盘的文档进行更细粒度的控制。
Documents
除了文档的对应文件中提供的任何 front matter 外,每个文档都具有以下属性:
Variable | Description |
---|---|
| The (unrendered) content of the document. If no front matter is provided, Jekyll will not generate the file in your collection. If front matter is used, then this is all the contents of the file after the terminating |
| The rendered output of the document, based on the |
| The full path to the document's source file. |
| The path to the document's source file relative to the site source. |
| The URL of the rendered collection. The file is only written to the destination when the collection to which it belongs has |
| The name of the document's collection. |
| The date of the document's collection. |
=================================================== |