Jekyll Collection 다루기

최근에 Jekyll로 다시 이사 후 몇가지 기능들을 개발하고 있습니다. 그 중 하나를 해결하기 위해선 특정 type의 페이지들을 모아서 json으로 만들어주는 과정이 필요한데, Jekyll의 Collection 기능을 이용해서 쉽게 해결했습니다.

오늘은 Jekyll Collection에 대한 이야기를 할까 합니다.

Jekyll Collection

Jekyll Collection은 Contents를 그룹으로 만들어 관리할 수 있는 기능입니다. 공식 사이트에선 Authors 등 작성자가 여러명이 있는 경우를 예시로 소개 되었지만 사용하기에 따라서 Jekyll 사이트를 좀 더 다채롭게 꾸밀 수 있습니다.

Collections are a great way to group related content like members of a team or talks at a conference.

Jekyll

개인적으로는 jekyll이 기본으로 제공해주는 pages, posts와 같은 것을 더 만들 수 있다고 이해했습니다. 그리고 실제로 만들어보시면 pages나 posts와 거의 동일하단 것을 알 수 있습니다.

In _config.yml

Collection을 만들기 위해선 _config.yml에 collections 항목으로 명시해줘야 합니다. 아래와 같이 명시된 경우 ./_newcollections/ 하위 경로가 collection으로 인식하게 됩니다.

collections:
  newcollections: # Collection 이름
    output: true  # output이 설정되면 접근할 수 있는 페이지가 됩니다.
    sort_by: name # sort_by로 정렬을 지정할 수 있습니다.
    order:
      - first.md
      - second.md # order를 사용하면 수동으로 정렬을 지정할 수 있습니다.

In Liquid

이제 _newcollections 하위 페이지는 newcollections 이란 이름의 collection이 되었고 jekyll 페이지 어디에서든 site.newcollections 으로 호출할 수 있습니다. 저는 아래와 같은 형태로 json 파일을 생성했습니다.

[
  {% for post in site.newcollections %}
    {
      "title"    : "{{ post.title | escape }}",
      "tags"     : "{{ post.tags | array_to_sentence_string }}",
      "url"      : "{{ site.baseurl }}{{ post.url }}",
      "date"     : "{{ post.date | date: '%b %-d, %Y' }}"
    } {% unless forloop.last %},{% endunless %}
  {% endfor %}
]

그러면 newcollections에 속한 페이지들을 루프를 돌며 하나의 json 페이지로 만들어줍니다.

잘 동작하네요!

References