Подтвердить что ты не робот

Получение определенного элемента из коллекции в Jekyll

Я перестраиваю свой текущий сайт в Jekyll и пытаюсь настроить структуру вокруг модели контента, используя объекты (файлы в коллекции), которые имеют атрибуты (пары ключ/значение в фронте YAML). Простые концептуальные материалы, предназначенные для демонстрации эффективного моделирования контента для моей команды.

Все, что на сайте, которое используется повторно, становится объектом, с типом объекта, определенным конкретной коллекцией, содержащей его файл. Итак, у меня есть коллекция "сервисов" для сервисов, предлагаемых компанией, коллекция "клиенты" и коллекция "люди" с файлом для каждого человека.

Проблема, с которой я сталкиваюсь, ссылается на конкретный элемент в коллекции. Например, я хочу, чтобы у моих сообщений были авторы. Я нашел массу решений для этого, используя _data, но я хочу, чтобы мои авторы имели страницы и коллекции, автоматически выводит страницу для каждого человека. Я смог получить _data для создания страниц, но у меня нет контроля над порядком, в котором перечислены элементы, тогда как для коллекции есть множество способов контролировать порядок.

Мое текущее решение кажется взломанным. Я даю каждому человеку идентификатор, равный "firstname-lastname", поэтому в фронте YAML он сказал бы id: steve-hickey. Затем я использую следующий код, чтобы перебирать каждого человека на сайте и возвращать любые, которые соответствуют идентификатору автора, указанному в сообщении.

Шаблон макета сообщения:

---
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>

Post front-matter:

---
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 дней поиска я не могу найти хороший ответ на этот вопрос.

4b9b3361

Ответ 1

Если люди уникальны в вашей коллекции, {% assign author = site.people | where:"id", page.author-id %} вернет массив с одним элементом. Чтобы получить доступ к этому элементу, выполните следующие действия:

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

Это захват первого (и единственного) элемента в вашем массиве. Теперь вы выполняете {{ author.anykey }} напрямую.