Coding Log



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

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

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

참고 Jekyll 공식 사이트

Liquid 속성

컬렉션(Collections)

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

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

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

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

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

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

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

문서(Documents)

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

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

컬렉션 속성 접근하기

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

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

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을 단일페이지에 나열 하려면 아래와 같이 사용하면 된다.

{% 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 %}


DISQUS 로드 중…
댓글 로드 중…

트랙백을 확인할 수 있습니다

URL을 배껴둬서 트랙백을 보낼 수 있습니다