[Step by Step Tutorial] 09. Collections
๋ง์ฝ์ ๋ธ๋ก๊ทธ์ ์ ์๋ค ๊ฐ๊ฐ์ ์ํ ๊ฐ๋จํ ์๊ฐ๋ง๊ณผ ๊ทธ๋ค์ ํฌ์คํธ๋ค์ ๋ณผ ์ ์๋์ ์๋ค๋ง์ ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ด๊ฒ์ ์ํด์ ์ปฌ๋ ์ (Collection)์ ์ฌ์ฉํด์ผ ํ๋ค. ์ปฌ๋ ์ ์ ์ฝํ ์ธ ๋ฅผ ๋ ์ง๋ณ๋ก ๊ทธ๋ฃนํํ์ง ์์๋ ๋๋ค๋ ์ ์ ์ ์ธํ๋ฉด ํฌ์คํธ์ ์ ์ฌํ๋ค.
#
๊ตฌ์ฑ์ปฌ๋ ์
์ ๋ง๋ค๊ธฐ ์ํด์ Jekyll์๊ฒ _config.yml
์ ํตํด ์๋ ค์ฃผ์ด์ผ ํ๋ค.
๋จผ์ _config.yml
ํ์ผ์ ๋ง๋ ๋ค.
collections: authors
_config.yml
ํ์ผ์ ์์ ํ ํ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๊ธฐ ์ํด์๋ Jekyll ์๋ฒ๋ฅผ ์ฌ์์ํด์ผ ํ๋ค.Ctrl
+C
๋ฅผ ํตํด ์๋ฒ๋ฅผ ๋ฉ์ถ๊ณjekyll serve
๋ก ์์ํ ์์๋ค.
#
์ ์ ์ถ๊ฐํ๊ธฐ์ปฌ๋ ์
์ ์๋ ์์ดํ
๋ค(๋ฌธ์๋ค)์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ์๋ _*collection_name*
๋๋ ํ ๋ฆฌ์ ๋ง๋ค๋ฉด ๋๋ค. ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ปฌ๋ ์
์ ๋ง๋ค๊ธฐ ์ํด์๋ _authors
๋ก ๋ง๋ค๋ฉด ์ ์ ํ ๊ฒ์ด๋ค.
์ ์์ ๊ดํ ๋ฌธ์๋ค์ ๋ง๋ค์ด๋ณด์.
_authors/jill.md
---short_name: jillname: Jill Smithposition: Chief Editor---Jill is an avid fruit grower based in the south of France.
_authors/ted.md
:
---short_name: tedname: Ted Doeposition: Writer---Ted has been eating fruit since he was baby.
#
Staff ํ์ด์ง๋ชจ๋ ์ ์๋ค์ ๋ฆฌ์คํธํด์ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง๋ฅผ ์ถ๊ฐํด๋ณด์. Jekyll์ ์ปฌ๋ ์
์ site.authors
๋ณ์๋ฅผ ํตํด ์ด์ฉํ ์ ์๋๋ก ํด์ค๋ค.
๋ฃจํธ ๋๋ ํ ๋ฆฌ์ staff.html
์ ๋ง๋ ๋ค.
---layout: defaulttitle: Staff---
<h1>Staff</h1>
<ul> {% for author in site.authors %} <li> <h2>{{ author.name }}</h2> <h3>{{ author.position }}</h3> <p>{{ author.content | markdownify }}</p> </li> {% endfor %}</ul>
content๊ฐ Markdown์ผ๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ markdownify
filter๋ฅผ ์ ์ฉํด์ ์คํํด์ผํ๋ค. ์ด๊ฒ์ ๋ ์ด์์์ {{ content }}
๋ฅผ ์ฌ์ฉํ ๋ ์๋์ ์ผ๋ก ๋๋ค. (์์ง ์ดํดํ์ง ๋ชปํจ)
์ด์ Staff ํ์ด์ง ์ญ์ ๋ค๋น๊ฒ์ด์
์ ๋ํ๋์ผ ํ๊ธฐ ๋๋ฌธ์ _data/navigation.yml
์ ์ถ๊ฐํด์ค๋ค.
- name: Home link: /- name: About link: /about.html- name: Blog link: /blog.html- name: Staff link: /staff.html
๊ธฐ๋ณธ์ ์ผ๋ก(default ๊ฐ์ผ๋ก) ์ปฌ๋ ์
์ ๋ฌธ์์ ํ์ด์ง๋ฅผ ์ถ๋ ฅํ์ง ์๋๋ค. ๋ง์ฝ ๊ฐ ์ ์ ๋ง๋ค ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ์ถ๋ค๋ฉด _config.yml
ํ์ผ์ ์ด์ง ์์ ํด์ผ ํ๋ค.
collections: authors: output: true
์ด๋ ๊ฒ ํ๋ฉด author.url
์ ์ฌ์ฉํ์ฌ ํ์ด์ง์ ์ ๊ทผํ ์ ์๋ค.
staff.html
์ ๋งํฌ๋ฅผ ์ถ๊ฐํด๋ณด์
---layout: defaulttitle: Staff---
<h1>Staff</h1>
<ul> {% for author in site.authors %} <li> <h2><a href="{{ author.url }}">{{ author.name }}</a></h2> <h3>{{ author.position }}</h3> <p>{{ author.content | markdownify }}</p> </li> {% endfor %}</ul>
ํฌ์คํธ์ ๊ฐ์ด authors
๋ฅผ ์ํ ๋ ์ด์์์ ๋ง๋ค ํ์๊ฐ ์๋ค.
_layouts/author.html
์ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ ๋ค.
---layout: default---
<h1>{{ page.name }}</h1><h2>{{ page.position }}</h2>
{{ content }}
#
Front matter defaults์ด๋ ๊ฒ ๋ง๋ author
๋ ์ด์์์ author๋ค, jill.md
์ ted.md
์ front matter ์ ํ์ํด์ฃผ์ด์ผ ํ์ง๋ง ์ด๊ฒ์ ๊ณ์ ๋ฐ๋ณต๋๋ ์์
์ด๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ณผ ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ์๋์ ์ผ๋ก ํฌ์คํธ๋ค์ post
๋ ์ด์์์ ์ฌ์ฉํ๊ณ , author๋ค์ author
๋ ์ด์์์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ _config.yml
์์ front matter defaults๋ฅผ์ฌ์ฉํด์ ํด๊ฒฐํ ์ ์๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ ์ฉํ scope
๋ฅผ ์ ํ๊ณ , ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ค์ด๊ฐ front matter๋ฅผ ๋ฃ์ผ๋ฉด ๋๋ค.
๋ค์์ _config.yml
์์์ด๋ค.
collections: authors: output: true
defaults: - scope: path: '' type: 'authors' values: layout: 'author' - scope: path: '' type: 'posts' values: layout: 'post' - scope: path: '' values: layout: 'default'
์ด์ ๋ชจ๋ page
๋ค๊ณผ post
๋ค์ front matter์์ layout
์ ๊ดํ ๋ถ๋ถ์ ๋ค ์ง์๋ ๋๋ค.
_config.yml
ํ์ผ์ ์์ ํ๋ฉด Jekyll ์๋ฒ๋ฅผ ์ฌ์์ํด์ผ ํ๋ค๋ ๊ฒ์ ๋ช ์ฌํ๋ผ.
#
List author's posts๊ฐ author๊ฐ ์ด ํฌ์คํธ๋ค์ ๊ทธ๋ค์ ํ์ด์ง์ ํํฐ๋งํด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๊ฒ์ํ๊ธฐ ์ํด์, author์ short_name
๊ณผ post์ author
๊ฐ ๋งค์น๋ ํ์๊ฐ ์๋ค.
_layouts/author.html
์ ๋ณด์.
---layout: default---
<h1>{{ page.name }}</h1><h2>{{ page.position }}</h2>
{{ content }}
<h2>Posts</h2><ul> {% assign filtered_posts = site.posts | where: 'author', page.short_name %} {% for post in filtered_posts %} <li><a href="{{ post.url }}">{{ post.title }}</a></li> {% endfor %}</ul>
| where: 'author', page.short_name
์ด ํํฐ. (์ดํ์ ๋ ๊ณต๋ถ)
#
Link to authors page๊ฐ๊ฐ์ ํฌ์คํธ๋ author์ ํ์ด์ง๋ก ๊ฐ ์ ์๋ ๋งํฌ๋ฅผ ๊ฐ์ ธ์ผํ ๊ฒ์ด๋ค.
์์์ ํ ๊ฒ๊ณผ ๋น์ทํ ํํฐ๋ง ๊ธฐ์ ์ ์ฌ์ฉํด์ ํ ์ ์๋ค.
_layouts/post.html
---layout: default---
<h1>{{ page.title }}</h1>
<p> {{ page.date | date_to_string }} {% assign author = site.authors | where: 'short_name', page.author | first %} {% if author %} - <a href="{{ author.url }}">{{ author.name }}</a> {% endif %}</p>
{{ content }}
http://localhost:4000์ ์ ์ํด์ staff page๊ฐ ์ ์๋ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ํฌ์คํธ์ author๋ก ๊ฐ๋ ๋งํฌ๊ฐ ์ ์๋ํ๋์ง ํ์ธํด๋ณด์.