컬렉션
컬렉션은 서로 관련된 정보들 (예를 들면, 팀 멤버들의 목록, 또는 컨퍼런스 대화 내용) 을 그룹화하는데 아주 좋습니다.
셋업
컬렉션을 사용하려면 먼저 _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/_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
파일에 정의한 컬렉션 이름 앞에 _
문자를 붙인 것이어야 합니다.
출력
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
파일에
정의한 메타데이터와 다음 정보들도 사용할 수 있습니다:
변수 | 설명 |
---|---|
|
컬렉션의 이름. 예시, |
|
문서들의 배열. |
|
컬렉션 내의 정적 파일 배열. |
|
컬렉션 소스 디렉토리 (Site Source 디렉토리를 기준으로 한 상대 경로) |
|
컬렉션 소스 디렉토리 전체 경로 |
|
컬렉션의 문서들이 독립적인 파일로 출력될 것인지에 대한 여부. |
고정된 컬렉션
당신이 직접 생성한 컬렉션 외에, Jekyll 에는 posts
라는 고정된 컬렉션이 있습니다. 이 컬렉션은 _posts
디렉토리와
관계 없이 항상 존재합니다. 이를 기억해두어야 하는 이유는
site.collections
값을 순회하는 경우 걸러내야 할 필요가 있을지도
모르기 때문입니다.
원하는 컬렉션을 찾기위해 필터를 사용하는 방법입니다:
{{ site.collections | where: "label", "myCollection" | first }}
컬렉션과 시간
고정된 기본 컬렉션 posts
의 문서를 제외한, 당신이 생성한 컬렉션의 모든 문서는
날짜가 지정되어 있는 경우에도 그와 관계없이, Liquid 변수로 접근이 가능합니다. 따라서 모든 문서가 생성됩니다.
메타데이터에 output: true
를 가진 컬렉션의 문서들만 생성됩니다.
또한, 미래-시간의 문서는 site.future
도 참 인 경우에만
생성됩니다.
문서 생성에 대한 더 세밀한 조정은 문서의 머리말에
published: false
설정(기본값 true
)으로 가능합니다.
문서
모든 문서는 파일에 지정된 머리말뿐만 아니라, 다음과 같은 속성도 가지고 있습니다:
변수 | 설명 |
---|---|
|
문서의 (렌더링되지 않은) 컨텐츠. 머리말이 없다면, Jekyll 은 컬렉션에 어떠한 파일도 생성하지 않는다. 머리말이 사용되었다면, 이 변수는 머리말의 종료표시인 `---` 이후의 모든 내용이다. |
|
|
|
문서 소스 파일의 전체 경로 |
|
사이트 소스 경로를 기준으로 한, 문서 소스 파일의 상대 경로 |
|
렌더링 된 컬렉션의 URL. 사이트 환경설정에 |
|
해당 문서가 포함된 컬렉션의 이름 |
|
문서가 속한 컬렉션의 날짜 |