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

从Jekyll中的集合中获取特定项,jekyll,liquid,Jekyll,Liquid,我正在用Jekyll重建公司当前的站点,并尝试使用具有属性(YAML front matter中的键/值对)的对象(集合中的文件)围绕内容模型建立结构。设计用于向我的团队演示有效内容建模的简单概念材料 站点上任何被重用的对象都将成为对象,对象类型由包含其文件的特定集合定义。因此,我为公司提供的服务收集了“服务”,收集了“客户”,收集了“人员”,每个人都有一个文件 我遇到的问题是引用集合中的特定项。例如,我希望我的帖子有作者。我已经使用_数据找到了很多解决方案,但我希望我的作者拥有页面,集合会自动

我正在用Jekyll重建公司当前的站点,并尝试使用具有属性(YAML front matter中的键/值对)的对象(集合中的文件)围绕内容模型建立结构。设计用于向我的团队演示有效内容建模的简单概念材料

站点上任何被重用的对象都将成为对象,对象类型由包含其文件的特定集合定义。因此,我为公司提供的服务收集了“服务”,收集了“客户”,收集了“人员”,每个人都有一个文件

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

我目前的解决方案让人感觉不舒服。我给每个人一个id,这个id等于“firstname lastname”,所以在YAML的前面,它会说
id:steve hickey
。然后,我使用下面的代码遍历站点上的每个人,并返回与文章中指定的作者id匹配的任何人

发布布局模板:

---
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>
人员集合中的人员文件:

---
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 |其中:“id”,page.author-id%}
将返回一个包含一个元素的数组。 要直接访问此元素,请执行以下操作:

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

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

谢谢!我最终在某个地方找到了这个解决方案。与您的语法略有不同,但完全相同。不过你的话没那么冗长,所以我想换个说法
{%assign author=site.people |其中:'id',page.author-id%}{%assign author=author[0]]}
对于遵循此操作的任何人,
id
似乎是jekyll自动添加的字段,与URL匹配。您可以创建自己的密钥,也可以修改id以匹配:{%assign path='/diets/'| append:diet.id%}{%assign found=site.diets |其中:'id',path | first%}
{% assign author = site.people | where:"id", page.author-id  | first %}