コレクション
コレクションは、チームメンバーや会議での講演など、関連するコンテンツをグループ化するのに最適な方法です。
セットアップ
コレクションを使用するには、まず_config.yml
で定義する必要があります。たとえば、これはスタッフメンバーのコレクションです。
collections:
- staff_members
この場合、collections
は、各コレクションに対して追加のメタデータが定義されていないシーケンス(つまり、配列)として定義されています。オプションで、collections
をシーケンスの代わりにマッピング(つまり、ハッシュマップ)として定義し、追加のフィールドを定義することで、コレクションのメタデータを指定できます。
collections:
staff_members:
people: true
コレクションをシーケンスとして定義すると、そのページはデフォルトではレンダリングされません。これを有効にするには、コレクションにoutput: true
を指定する必要があります。これには、コレクションをマッピングとして定義する必要があります。詳細については、「出力」セクションを参照してください。
コレクションをまとめる3.7.0
オプションで、collections_dir: my_collections
を使用して、すべてのコレクションを同じ場所に格納するためのディレクトリを指定できます。
そうすると、Jekyllはmy_collections/_books
でbooks
コレクションを、my_collections/_recipes
でrecipes
コレクションを探します。
ドラフトと投稿をカスタムコレクションディレクトリに移動することを忘れないでください。
collections_dir: my_collections
を使用して、すべてのコレクションを同じ場所に格納するためのディレクトリを指定する場合は、_drafts
ディレクトリと_posts
ディレクトリをmy_collections/_drafts
とmy_collections/_posts
に移動する必要があります。コレクションディレクトリの名前は、アンダースコア(`_`)で始めることはできません。
コンテンツを追加
対応するフォルダー(例:<source>/_staff_members
)を作成し、ドキュメントを追加します。フロントマターが存在する場合は、フロントマターが処理され、フロントマターの後のすべてのものがドキュメントのcontent
属性にプッシュされます。フロントマターが指定されていない場合、Jekyllはそれを静的ファイルとみなし、コンテンツはそれ以上の処理を受けません。フロントマターが指定されている場合、Jekyllはファイルの内容を期待される出力に処理します。
フロントマターが存在するかどうかにかかわらず、Jekyllは、コレクションのメタデータでoutput: true
が設定されている場合にのみ、宛先ディレクトリ(例:_site
)に書き込みます。
たとえば、上記で設定したコレクションにスタッフメンバーを追加する方法を次に示します。ファイル名は./_staff_members/jane.md
で、次の内容が含まれています。
---
name: Jane Doe
position: Developer
---
Jane has worked on Jekyll for the past *five years*.
内部的にはコレクションと見なされますが、上記のことは投稿には適用されないことに注意してください。有効なファイル名形式を持つ投稿は、フロントマターを含まない場合でも処理対象としてマークされます。
ディレクトリに正しい名前を付けることを忘れないでください。
フォルダーには、`_config.yml`ファイルで定義したコレクションと同じ名前で、先頭に`_`文字を追加する必要があります。
出力
ページでsite.staff_members
を反復処理し、各スタッフメンバーのコンテンツを出力できるようになりました。投稿と同様に、ドキュメントの本文にはcontent
変数を使用してアクセスします。
{% for staff_member in site.staff_members %}
<h2>{{ staff_member.name }} - {{ staff_member.position }}</h2>
<p>{{ staff_member.content | markdownify }}</p>
{% endfor %}
Jekyllがコレクション内の各ドキュメントに対してレンダリングされたページを作成するようにする場合は、_config.yml
のコレクションメタデータでoutput
キーをtrue
に設定できます。
collections:
staff_members:
output: true
url
属性を使用して、生成されたページへのリンクを作成できます。
{% for staff_member in site.staff_members %}
<h2>
<a href="{{ staff_member.url }}">
{{ staff_member.name }} - {{ staff_member.position }}
</a>
</h2>
<p>{{ staff_member.content | markdownify }}</p>
{% endfor %}
パーマリンク
コレクションの特別なパーマリンク変数を使用して、コレクション全体の出力URLを制御できます。
ドキュメントのカスタムソート4.0
デフォルトでは、コレクション内の2つのドキュメントは、両方のドキュメントのフロントマターにdate
キーがある場合、date
属性でソートされます。ただし、いずれかまたは両方のドキュメントのフロントマターにdate
キーがない場合、それらはそれぞれのパスでソートされます。
コレクションのメタデータを介してこのソートを制御できます。
フロントマターキーでソート
ドキュメントは、sort_by
メタデータをフロントマターキー文字列に設定することにより、フロントマターキーに基づいてソートできます。たとえば、キーlesson
に基づいてチュートリアルコレクションをソートするには、構成は次のようになります。
collections:
tutorials:
sort_by: lesson
ドキュメントは、キーの値の昇順に配置されます。ドキュメントにフロントマターキーが定義されていない場合、そのドキュメントはソートされたドキュメントのすぐ後に配置されます。複数のドキュメントにフロントマターキーが定義されていない場合、それらのドキュメントは日付またはパスでソートされ、ソートされたドキュメントのすぐ後に配置されます。
ドキュメントの手動順序付け
また、目的の順序でファイル名を一覧表示したorder
メタデータを設定することにより、ドキュメントを手動で順序付けすることもできます。たとえば、チュートリアルコレクションは次のように構成されます。
collections:
tutorials:
order:
- hello-world.md
- introduction.md
- basic-concepts.md
- advanced-concepts.md
リストエントリと一致しないファイル名を持つドキュメントは、再配置されたドキュメントの後に配置されます。ドキュメントがサブディレクトリの下にネストされている場合は、エントリにも含めます。
collections:
tutorials:
order:
- hello-world.md
- introduction.md
- concepts/basics.md
- concepts/advanced.md
両方のメタデータキーが正しく定義されている場合、order
リストが優先されます。
Liquid属性
コレクション
コレクションはsite.collections
でも利用できます。ここには、_config.yml
で指定したメタデータ(存在する場合)と、次の情報が含まれます。
変数 | 説明 |
---|---|
|
コレクションの名前(例:`my_collection`)。 |
|
ドキュメントの配列。 |
|
コレクション内の静的ファイルの配列。 |
|
サイトソースに対するコレクションのソースディレクトリへのパス。 |
|
コレクションのソースディレクトリへのフルパス。 |
|
コレクションのドキュメントが個別のファイルとして出力されるかどうか。 |
ハードコードされたコレクション
自分で作成したコレクションに加えて、`posts`コレクションはJekyllにハードコードされています。`_posts`ディレクトリがあるかどうかに関係なく存在します。これは、`site.collections`を反復処理するときに注意すべきことで、フィルタリングする必要がある場合があります。
フィルターを使用してコレクションを検索することができます:`{{ site.collections | where: "label", "myCollection" | first }}`
コレクションと時間
ハードコードされたデフォルトコレクション`posts`内のドキュメントを除き、作成したコレクション内のすべてのドキュメントは、割り当てられた日付(もしあれば)に関係なくLiquidを介してアクセスでき、レンダリング可能です。
ドキュメントは、関連するコレクションメタデータに`output: true`がある場合にのみ、ディスクに書き込まれようとします。さらに、未来の日付のドキュメントは、`site.future`がtrueの場合にのみ書き込まれます。
ドキュメントのディスクへの書き込みをより詳細に制御するには、ドキュメントのフロントマターで`published: false`(デフォルトは`true`)を設定することで可能です。
ドキュメント
ドキュメントの対応するファイルで提供されたフロントマターに加えて、各ドキュメントには次の属性があります。
変数 | 説明 |
---|---|
|
ドキュメントの(レンダリングされていない)コンテンツ。フロントマターが指定されていない場合、Jekyllはコレクション内にファイルを生成しません。フロントマターが使用されている場合、これはフロントマターの終端の`---`以降のファイルの内容すべてです。 |
|
ドキュメントのレンダリングされた出力(`content`に基づく)。 |
|
ドキュメントのソースファイルへのフルパス。 |
|
サイトソースに対するドキュメントのソースファイルへのパス。 |
|
レンダリングされたコレクションのURL。ファイルは、それが属するコレクションがサイトの構成で`output: true`を持っている場合にのみ宛先に書き込まれます。 |
|
ドキュメントのコレクションの名前。 |
|
ドキュメントのコレクションの日付。 |