从 Jekyll 的集合中获取特定项目

Getting a specific item from a collection in Jekyll

我正在用 Jekyll 重建我公司的当前站点,并尝试使用具有属性的对象(集合中的文件)围绕内容模型设置结构(key/value 对在 YAML 前端) .旨在向我的团队展示有效内容建模的简单概念性内容。

网站上任何被重复使用的东西都会成为一个对象,对象的类型由包含其文件的特定集合定义。因此,我有一个 "services" 集合用于公司提供的服务,一个 "clients" 集合和一个 "people" 集合,每个人都有一个文件。

我遇到的问题是引用集合中的特定项目。例如,我希望我的 post 有作者。我已经找到了大量使用 _data 的解决方案,但我希望我的作者拥有页面和集合,自动为每个人输出一个页面。我已经能够获取 _data 来生成页面,但我无法控制项目列出的顺序,而对于集合,我有很多方法可以控制顺序。

我目前的解决方案感觉很老套。我给每个人一个等于 "firstname-lastname" 的 id,所以在 YAML 前端它会说 id: steve-hickey。然后我使用以下代码遍历网站上的每个人和 return 与 post.

中指定的作者 ID 匹配的任何人

post布局模板:

---
layout: default
---

<header class="intro post-header">
  <h1>{{ page.title }}</h1>
  {% assign people = site.people | where:"id", page.author-id %}
  {% for person in people %}
  <p>Written by <a href="/about/{{ page.author-id }}/">{{ person.first-name }} {{ person.last-name }}</a> on <p>{{ page.date | date: '%B %d, %Y' }}</p></p>
  {% endfor %}
</header>
<div class="post-body">

{{ content }}

</div>

A post的前言:

---
title: User Offboarding
layout: post
nav-area: blog
author-id: steve-hickey
---

来自人物集合的人物文件:

---
id: steve-hickey
first-name: Steve
last-name: Hickey
job: User Experience Strategist & AUX Director
layout: person
nav-area: about
portrait-url:
---

似乎应该有一种方法可以根据文件或对象已经拥有的唯一属性(例如其名称或 url 来识别该文件或对象。这样我就可以指向一个特定的对象,而不是评估所有对象以获得我必须编写的唯一 属性。但是经过3天的搜索,我找不到一个好的答案。

如果人在您的集合中是独一无二的,{% assign author = site.people | where:"id", page.author-id %} 将 return 一个只有一个元素的数组。 为了直接访问这个元素做:

{% assign author = site.people | where:"id", page.author-id  | first %}

这将获取数组中的第一个(也是唯一一个)元素。您现在直接 {{ author.anykey }}