集合

集合是分组相关内容(如团队成员或会议上的演讲)的好方法。

设置

要使用集合,首先需要在 _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 会将文件内容处理成预期的输出。

无论是否存在页眉,只有在集合元数据中设置了 output: true 时,Jekyll 才会写入目标目录(例如 _site)。

例如,以下是如何将工作人员添加到上述集合集中的方法。文件名是 ./_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 %}

有一些 集合的特殊永久链接变量,可帮助您控制整个集合的输出 URL。

文档的自定义排序4.0

默认情况下,当集合中的两个文档的页眉中都有 date 键时,这两个文档会按其 date 属性排序。但是,如果任一文档或两个文档的页眉中都没有 date 键,则它们会按各自的路径排序。

您可以通过集合的元数据控制此排序。

按页眉键排序

可以通过将 sort_by 元数据设置为前置关键字符串来根据前置关键对文档进行排序。例如,要根据关键 lesson 对教程集合进行排序,配置如下

collections:
  tutorials:
    sort_by: lesson

文档按关键值的升序排列。如果文档未定义前置关键,则该文档将紧跟在已排序文档之后。当多个文档未定义前置关键时,这些文档将按其日期或路径排序,然后紧跟在已排序文档之后。

手动对文档排序

您还可以通过设置 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 属性

集合

集合也可在 site.collections 中找到,其中包含您在 _config.yml 中指定的元数据(如果存在)和以下信息

变量 说明

label

集合的名称,例如 my_collection

docs

文档 数组。

files

集合中的静态文件数组。

relative_directory

集合源目录相对于网站源的路径。

directory

集合源目录的完整路径。

output

集合文档是否将输出为单个文件。

硬编码集合

除了您自己创建的任何集合外,posts 集合已硬编码到 Jekyll 中。无论您是否有 _posts 目录,它都存在。在遍历 site.collections 时需要注意这一点,因为您可能需要将其过滤掉。

您可能希望使用过滤器来查找您的集合:{{ site.collections | where: "label", "myCollection" | first }}

集合和时间

除了硬编码默认集合 posts 中的文档,您创建的集合中的所有文档都可以通过 Liquid 访问,无论其分配的日期(如果有)如何,因此可以呈现。

仅当相关集合元数据具有 output: true 时,才尝试将文档写入磁盘。此外,仅当 site.future 也为 true 时,才写入未来日期的文档。

可以通过在文档的前置内容中设置 published: false默认情况下为 true)来对写入磁盘的文档进行更精细的控制。

文档

除了文档对应文件中提供的任何前置内容之外,每个文档还具有以下属性

变量 说明

content

文档的(未呈现的)内容。如果没有提供前置内容,Jekyll 不会在您的集合中生成该文件。如果使用了前置内容,那么这就是前置内容的终止 `---` 之后的整个文件内容。

output

基于 content 的文档的呈现输出。

path

文档源文件的完整路径。

relative_path

文档源文件相对于站点源的路径。

url

呈现的集合的 URL。仅当它所属的集合在站点的配置中具有 output: true 时,该文件才会被写入目标。

collection

文档集合的名称。

date

文档集合的日期。