컬렉션

컬렉션은 서로 관련된 정보들 (예를 들면, 팀 멤버들의 목록, 또는 컨퍼런스 대화 내용) 을 그룹화하는데 아주 좋습니다.

셋업

컬렉션을 사용하려면 먼저 _config.yml 에 컬렉션을 정의해야 합니다. 다음은 스태프 멤버 컬렉션에 대한 예시입니다:

collections:
  - staff_members

여기서 collections 는 시퀀스로 (예, 배열) 각각의 컬렉션에 대한 부가적인 메타데이터 없이 정의되었습니다. 컬렉션에 메타데이터를 지정하고 싶다면 컬렉션을 시퀀스가 아닌 매핑 (예, 해시맵) 으로 정의한 뒤, 그 안에 부가적인 필드들을 정의합니다:

collections:
  staff_members:
    people: true

컬렉션을 시퀀스로 정의할 때, 포함된 페이지들이 자동으로 렌더링되지 않습니다. 이를 활성화하려면, 컬렉션에 output: true 가 지정되어 있어야 하는데, 이는 컬렉션을 매핑으로 정의하는 것과 같습니다. 더 자세한 내용은, 출력 섹션을 참고하세요.

컬렉션을 한 곳에 모으세요3.7.0

선택사항으로서, 당신의 모든 컬렉션을 한 곳에 보관하기 위해 collections_dir: my_collections 로 디렉토리를 지정할 수 있습니다.

그럼 Jekyll 은 books 컬렉션에 대해서는 my_collections/_books 를, recipes 컬렉션에 대해서는 my_collections/_recipes 를 참고합니다.

초안과 포스트를 컬렉션 디렉토리로 옮기세요

모든 컬렉션을 한 곳에 보관하려고 collections_dir: my_collections 로 디렉토리를 지정한 후에는, _drafts_posts 디렉토리를 my_collections/_draftsmy_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 파일에 정의한 컬렉션 이름 앞에 _ 문자를 붙인 것이어야 합니다.

출력

Now you can iterate over site.staff_members on a page and output the content for each staff member. Similar to posts, the body of the document is accessed using the content variable:

{% for staff_member in site.staff_members %}
  <h2>{{ staff_member.name }} - {{ staff_member.position }}</h2>
  <p>{{ staff_member.content | markdownify }}</p>
{% endfor %}

컬렉션에 포함된 모든 문서를 렌더링하고 싶다면, _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 결과물을 제어할 수 있게 도와줍니다.

문서 순서 조정

디폴트로, 머리말에 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 파일에 정의한 메타데이터와 다음 정보들도 사용할 수 있습니다:

변수 설명

label

컬렉션의 이름. 예시, my_collection.

docs

문서들의 배열.

files

컬렉션 내의 정적 파일 배열.

relative_directory

컬렉션 소스 디렉토리 (Site Source 디렉토리를 기준으로 한 상대 경로)

directory

컬렉션 소스 디렉토리 전체 경로

output

컬렉션의 문서들이 독립적인 파일로 출력될 것인지에 대한 여부.

고정된 컬렉션

당신이 직접 생성한 컬렉션 외에, Jekyll 에는 posts 라는 고정된 컬렉션이 있습니다. 이 컬렉션은 _posts 디렉토리와 관계 없이 항상 존재합니다. 이를 기억해두어야 하는 이유는 site.collections 값을 순회하는 경우 걸러내야 할 필요가 있을지도 모르기 때문입니다.

원하는 컬렉션을 찾기위해 필터를 사용하는 방법입니다: {{ site.collections | where: "label", "myCollection" | first }}

컬렉션과 시간

고정된 기본 컬렉션 posts 의 문서를 제외한, 당신이 생성한 컬렉션의 모든 문서는 날짜가 지정되어 있는 경우에도 그와 관계없이, Liquid 변수로 접근이 가능합니다. 따라서 모든 문서가 생성됩니다.

메타데이터에 output: true 를 가진 컬렉션의 문서들만 생성됩니다. 또한, 미래-시간의 문서는 site.future 인 경우에만 생성됩니다.

문서 생성에 대한 더 세밀한 조정은 문서의 머리말에 published: false 설정(기본값 true)으로 가능합니다.

문서

모든 문서는 파일에 지정된 머리말뿐만 아니라, 다음과 같은 속성도 가지고 있습니다:

변수 설명

content

문서의 (렌더링되지 않은) 컨텐츠. 머리말이 없다면, Jekyll 은 컬렉션에 어떠한 파일도 생성하지 않는다. 머리말이 사용되었다면, 이 변수는 머리말의 종료표시인 `---` 이후의 모든 내용이다.

output

content 에 기반하여 렌더링 된, 문서의 출력

path

문서 소스 파일의 전체 경로

relative_path

사이트 소스 경로를 기준으로 한, 문서 소스 파일의 상대 경로

url

렌더링 된 컬렉션의 URL. 사이트 환경설정에 output: true 를 가지고 있는 컬렉션의 파일들만 Site Destination 에 생성된다.

collection

해당 문서가 포함된 컬렉션의 이름

date

문서가 속한 컬렉션의 날짜