Jekyll 카테고리 게시글 수 정렬
Feb 22, 2019 · Jekyll
Github Page를 사용하여 블로그를 구축한 이유 중 하나가 구성을 원하는데로 할 수 있는 장점이 있기 때문이였다.
leonids theme를 사용하여 블로그를 구축 하였는데, 카테고리 정렬 순서가 어떻게 되어있는지 잘 모르겠다.
그래서 원하는 구성인 이름을 할지, 게시글 수로 할지 고민을 하다가 최종적으로 게시글 수로 정렬을 하게 되었다.
가장 처음에는 site.categories
에 있는 값을 정렬하려고 했지만, 실패했다.
그래서 해당 값에서 게시글이 몇개인지를 추출하여 사용하였다.
{% for s in site.categories %}
{% assign name = s | first %}
{% assign size = site.categories[name] | size %}
{% endfor %}
위와 같이 작성하면 size
에 게시글 수가 저장된다. 하지만 정렬을 하는 기준은 문자열이기 때문에, 0 패딩을 추가해 주어야 한다.
{% assign max_length = 0 %}
{% for s in site.categories %}
{% assign name = s | first %}
{% assign size = site.categories[name] | size %}
{% assign len = size | split: null | size %}
{% if max_length < len %}
{% assign max_length = len | plus: 0%}
{% endif %}
{% endfor %}
위와 같이 max_length
에 padding을 몇개 넣어야 할지 계산하였다.
{% for s in site.categories %}
{% assign name = s | first %}
{% assign size = site.categories[name] | size %}
{% assign len = size | split: null | size %}
{% assign pad = max_length | minus: len %}
{% for c in (1..pad) %}
{% assign size = size | prepend: '0' %}
{% endfor %}
{% endfor %}
그리고, size
에 0을 추가해 준다.
{% assign categories = '' | split: "" %}
{% for s in site.categories %}
{% assign name = s | first %}
{% assign size = site.categories[name] | size %}
{% assign name = name | split: split_char %}
{% assign len = size | split: null | size %}
{% assign pad = max_length | minus: len %}
{% for c in (1..pad) %}
{% assign size = size | prepend: '0' %}
{% endfor %}
{% assign temp = size | split: split_char | concat: name %}
{% assign categories = categories | push: temp %}
{% endfor %}
{% assign categories = categories | sort %}
마지막으로 만든 값을 배열에 저장하고, 정렬한다.
categories에는 ["size", "category"]
을 원소로 가지는 배열로 구성되어있다.
최종적으로 다음과 같이 작성하였다.
{% assign split_char = '#' %}
{% assign max_length = 0 %}
{% for s in site.categories %}
{% assign name = s | first %}
{% assign size = site.categories[name] | size %}
{% assign len = size | split: null | size %}
{% if max_length < len %}
{% assign max_length = len | plus: 0%}
{% endif %}
{% endfor %}
{% assign categories = '' | split: "" %}
{% for s in site.categories %}
{% assign name = s | first %}
{% assign size = site.categories[name] | size %}
{% assign name = name | split: split_char %}
{% assign len = size | split: null | size %}
{% assign pad = max_length | minus: len %}
{% for c in (1..pad) %}
{% assign size = size | prepend: '0' %}
{% endfor %}
{% assign temp = size | split: split_char | concat: name %}
{% assign categories = categories | push: temp %}
{% endfor %}
{% assign categories = categories | sort %}
{% for cat in categories reversed %}
<div class="tag-group">
{% capture cat_name %}{{ cat | last }}{% endcapture %}
<a href="#{{ cat_name | slugize }}"><h5 class="tag-group-title" id="{{ cat_name | slugize }}">
{{ cat_name }}
</h5></a>
{% for post in site.categories[cat_name] %}
<article class="tag-item">
<a class="tag-item-title" href="{{ site.url }}{{ post.url }}">{{post.title}}</a>
</article>
{% endfor %}
</div>
{% endfor %}