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

Ste*_*key 16 liquid jekyll

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

网站上被重用的任何内容都会成为一个对象,对象的类型由包含其文件的特定集合定义.因此,我有一个"服务"集合,用于公司提供的服务,"客户"集合,以及"人员"集合,每个人都有一个文件.

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

我目前的解决方案感觉很糟糕.我给每个人一个等于"firstname-lastname"的id,所以在YAML前面的事情中它会说id: steve-hickey.然后我使用以下代码遍历网站上的每个人,并返回与帖子中指定的author-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>
Run Code Online (Sandbox Code Playgroud)

帖子的正面事项:

---
title: User Offboarding
layout: post
nav-area: blog
author-id: steve-hickey
---
Run Code Online (Sandbox Code Playgroud)

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

---
id: steve-hickey
first-name: Steve
last-name: Hickey
job: User Experience Strategist & AUX Director
layout: person
nav-area: about
portrait-url:
---
Run Code Online (Sandbox Code Playgroud)

似乎应该有一种方法来基于它已经拥有的唯一属性(例如其名称或URL)来标识特定文件或对象.这样我就可以指向一个特定的对象而不是为了我必须编写的唯一属性来评估所有这些对象.但经过3天的搜索,我找不到一个好的答案.

Dav*_*uel 20

如果人们在您的集合中是唯一的,{% assign author = site.people | where:"id", page.author-id %}则返回包含一个元素的数组.要直接访问此元素,请执行以下操作:

{% assign author = site.people | where:"id", page.author-id  | first %}
Run Code Online (Sandbox Code Playgroud)

这会抓取您数组中的第一个(也是唯一的)元素.你现在{{ author.anykey }}直接做.

  • 对于关注此内容的任何人来说,“id”似乎是 jekyll 自动添加的与 URL 匹配的字段。您要么想制作自己的密钥,要么只是修改您的 id 以匹配:{% allocate path = '/diets/' | 附加:diet.id %} {% 分配找到= site.diets | 其中:'id',路径 | 第一的 %} (2认同)