jekyll - 从Jekyll的集合中获取特定元素

标签 jekyll liquid

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

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

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

我当前的解决方案感觉很棘手。我给每个人一个ID,它等于“ firstname-lastname”,因此在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>


帖子的主要内容:

---
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 %}将返回一个包含一个元素的数组。
为了直接访问此元素,请执行以下操作:

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


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

关于jekyll - 从Jekyll的集合中获取特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162726/

相关文章:

seo - 每页 2 个版本

html - Jekyll 中输出多个段落标签

javascript - 我们可以在 cart.liquid 文件中添加送货和账单地址表单吗?

jekyll - Jekyll 中的范围帖子

jekyll - 在 win7 中运行 jekyll --server 失败

jekyll - 使用替换过滤器 mangles jekyll site.tags

git - 使用 gulpfile 将内容推送到 gh-pages

github - 如何为 GitHub 页面中的单个页面自定义 Jekyll 主题?

Jekyll - 设置缓存头和 gzip

jekyll - 在Liquid/Jekyll中排序日期格式(例如 “1st”, “3rd”和 “4th”)