전에 이 기능을 넣으려고 할때 “Jekyll Post Navigation Within a Category” 이 포스트를 발견했는데 플러그인 넣는 방법을 몰라서 일일이 변수 만들어서 체크하도록 해서 만드려고 하였으나, 내 지식의 한계로 인해서 만들 수 없었다. 플러그인 넣는게 이렇게 간단한 줄 알았으면 시도도 하지 않았을 텐데…

_plugins.rb 확장자로 아무 파일이나 생성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module Jekyll
    class WithinCategoryPostNavigation < Generator
      def generate(site)
        site.categories.each_pair do |category, posts|
          posts.sort! { |a,b| b <=> a}
          posts.each do |post|
            index = posts.index post
            next_in_category = nil
            previous_in_category = nil
            if index
              if index < posts.length - 1
                next_in_category = posts[index + 1]
              end
                if index > 0
                previous_in_category = posts[index - 1]
              end
            end
            post.data["next_in_category"] = next_in_category unless next_in_category.nil?
            post.data["previous_in_category"] = previous_in_category unless previous_in_category.nil?
          end
        end
      end
    end
  end

이후 파일에 위 내용을 복붙하고 포스트 레이아웃 파일로 이동하여 아래와 같이 문구를 추가해주면 끝!

1
2
3
4
5
6
7
{% if page.previous_in_category %}
<a href="{{ page.previous_in_category.url }}">{{ page.previous_in_category.title }}</a>
{% endif %}

{% if page.next_in_category %}
<a href="{{ page.next_in_category.url }}">{{ page.next_in_category.title }}</a>
{% endif %}

문제는 포스트가 상위 카테고리에서 묶인다는 점이다. 이 블로그의 포스트는 programing > php 이런 식으로 상위 카테고리와 하위 카테고리를 구분하고 있는데, 하위 카테고리에서 묶이면 좋으련만… 이건 루비 문법을 익히건 어떻게하건 새로운 방법을 찾아야겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{% if page.categories %}
  {% assign category = page.categories | last %}
  {% assign posts = site.categories[category] %}
  {% for post in posts %}
    {% if post.url == page.url %}
      {% assign post_index0 = forloop.index0 %}
      {% assign post_index1 = forloop.index %}
    {% endif %}
  {% endfor %}
  {% for post in posts %}
    {% if post_index0 == forloop.index %}
      {% assign next_post = post %}
    {% endif %}
    {% if post_index1 == forloop.index0 %}
      {% assign prev_post = post %}
    {% endif %}
  {% endfor %}
{% endif %}

그냥 플러그인을 사용하지 않고 위와같은 방법으로 해결했다. 위 코드는 “Template Variables for Next/Previous posts within a category“에서 찾아볼 수 있다. 깃허브에 나와있는 코드를 그대로 사용하면 위 플러그인과 동일한 효과가 나타난다. 필자는 page.categories | last 로 변경하여 가장 하위 카테고리 글만 나열되게 변경했다. 플러그인은 어떻게 손대야할지 도무지 감이 안와서…

WRITTEN BY

배진오

하고싶은 건 다 하면서 사는게 목표
im@baejino.com

comments powered by Disqus