015. JeKyll 컨텐츠 - (8) 컬렉션(Collections) - Liquid와 컬렉션

컨텐츠 - (8) 컬렉션(Collections) - Liquid와 컬렉션

본 카테고리는 정적 블로그 생성도구인 Jekyll에 관하여 작성하는 곳이다.

공식 사이트의 내용을 좀 더 풀어쓰고 스크린샷을 첨부하여 좀 더 상세히 기록하고자 한다.

참고 Jekyll 공식 사이트

Liquid 속성

컬렉션(Collections)

각 콜렉션은 site 변수로 접근할 수 있다.

예를 들어 _albums에 있는albums 컬렉션에 접근하려면 site.albums를 사용하면 된다.

각 컬렉션은 컬렉션 그 자체로 문서들의 배열로 site.pagessite.posts와 유사하게 동작한다.

아래에 컬렉션의 변수를 소개한다.

변수 설명
label 컬렉션의 이름
docs 문서들의 배열
files 컬렉션에 있는 정적 파일들의 배열
relative_directory 사이트의 소스를 기준으로한 컬렉션의 소스 디렉토리 경로
directory 컬렉션의 소스 디렉토리에 대한 전체 경로
output 컬렉션의 문서들이 개별적으로 출력되는 지에 대한 여부

위의 컬렉션 변수들은 _config.yml에 설정된 메타 데이터가 있을 경우에 site.collections로 접근할 수 있다.

참고 하드 코딩된 컬렉션
직접 만든 컬렉션 이외에도 posts의 컬렉션은 Jekyll로 하드 코딩 된다. 이는 _posts 디렉토리가 존재하든 안 하든 존재하며, 만약 필터링을 해야할 경우가 생길수도 있으므로 site.collections를 반복할 때 주의해야 한다.

문서(Documents)

각 문서는 해당 파일에 존재하는 YAML 머리말 이외에도 아래와 같은 변수들도 가지고 있다.

변수 설명
content (렌더링되지 않은) 문서의 내용
YAML 머리말이 제공되지 않으면 Jekyll은 컬렉션에 파일을 생성하지 않음
YAML 머리말이 영역인 ---이 종료되고 난 이후의 모든 내용이 content 변수에 포함
output content를 기반으로 렌더링된 문서
path 문서의 소스파일에 대한 전체 경로
relative_path 사이트의 소스를 기준으로한 문서의 소스파일에 대한 경로
url 렌더링된 컬렉션의 URL
사이트의 환경설정이 output: true일 때만 출력되는 파일에 생성
collection 문서가 속한 컬렉션 이름
date 문서가 속한 컬렉션의 날짜

컬렉션 속성 접근하기

사이트 내의 어느 곳에서나 YAML 머리말의 속성은 데이터로 접근할 수 있다.

위에서 _albums에 있는albums 컬렉션에 접근하려면 site.albums를 사용하면 된다는 예제를 들었는데, 아래와 같은 구조의 머리말을 가진 파일이 존재할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
title: "Josquin: Missa De beata virgine and Missa Ave maris stella"
artist: "The Tallis Scholars"
director: "Peter Phillips"
works:
- title: "Missa De beata virgine"
composer: "Josquin des Prez"
tracks:
- title: "Kyrie"
duration: "4:25"
- title: "Gloria"
duration: "9:53"
- title: "Credo"
duration: "9:09"
- title: "Sanctus & Benedictus"
duration: "7:47"
- title: "Agnus Dei I, II & III"
duration: "6:49"

이 개별파일은 Jekyll이 지원하는 마크업 형식을 따라야하며 .yaml 확장자로 저장할 수 없다.

컬렉션 내의 모든 album을 단일페이지에 나열 하려면 아래와 같이 사용하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
{% for album in site.albums %}
<h2>{{ album.title }}</h2>
<p>Performed by {{ album.artist }}{% if album.director %}, directed by {{ album.director }}{% endif %}</p>
{% for work in album.works %}
<h3>{{ work.title }}</h3>
<p>Composed by {{ work.composer }}</p>
<ul>
{% for track in work.tracks %}
<li>{{ track.title }} ({{ track.duration }})</li>
{% endfor %}
</ul>
{% endfor %}
{% endfor %}