Github avatar

GyeongSu Han's Github Pages

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

그리고, size0을 추가해 준다.

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