web-dev-qa-db-ja.com

Jekyllのコレクションから特定のアイテムを取得する

Jekyllにある会社の現在のサイトを再構築し、属性(YAMLフロントマターのキーと値のペア)を持つオブジェクト(コレクション内のファイル)を使用して、コンテンツモデルの周囲に構造を設定しようとしています。私のチームに効果的なコンテンツモデリングを示すために設計された単純な概念的なもの。

再利用されるサイト上のすべてのものがオブジェクトになり、そのファイルを含む特定のコレクションによって定義されたオブジェクトのタイプが使用されます。そのため、会社が提供するサービスの「サービス」コレクション、「クライアント」コレクション、および各個人のファイルを含む「人」コレクションがあります。

私が抱えている問題は、コレクション内の特定のアイテムを参照することです。たとえば、投稿に作成者を含めたいとします。 _dataを使用してこれに対する解決策をたくさん見つけましたが、著者にページを持たせ、コレクションに各人のページを自動的に出力させたいと思います。 _dataを取得してページを生成することはできましたが、アイテムが一覧表示される順序を制御することはできません。一方、コレクションを使用すると、順序を制御する方法がたくさんあります。

私の現在の解決策はハッキーだと感じています。私は各人に「firstname-lastname」と等しいIDを与えているので、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>

投稿の最前線:

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

Peopleコレクションのpersonファイル:

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

名前やURLなど、すでに所有している一意の属性に基づいて特定のファイルまたはオブジェクトを識別する方法があるはずです。そうすれば、作成する必要のある一意のプロパティについてすべてを評価するのではなく、特定のオブジェクトを指すことができます。しかし、3日間の検索の後、私はこれに対する良い答えを見つけることができません。

18
Steve Hickey

あなたのコレクションで人々がユニークである場合{% assign author = site.people | where:"id", page.author-id %}は、1つの要素を持つ配列を返します。この要素に直接アクセスするには、次のようにします。

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

これにより、配列の最初の(そして唯一の)要素が取得されます。あなたは今{{ author.anykey }} 直接。

22
David Jacquel