2015-02-04 2 views
2

Я использую Jekyll для создания блога, мне удалось успешно реализовать ссылки Next и Previous на моих страницах макетов (используя this answer). Я добавил несколько категорий (используя this answer), и каждая страница выполняет итерации по соответствующим категориям, отображающим только то, что я хочу.Jekyll - Следующая и предыдущие ссылки с различными категориями

Моя единственная проблема сейчас в том, что кнопки Назад и Далее еще перебирать все посты независимо от того, к какой категории они находятся.

Это код, который я использовал для следующей и предыдущей ссылки на нижней части макета :

 {% if page.previous %} 
      <span class="previous-link"> 
      <a rel="prev" href="{{ page.previous.url }}">Previous Entry</a> 
      </span> 
     {% endif %} 
     {% if page.next %} 
      <span class="next-link"> 
      <a rel="next" href="{{ page.next.url }}">Next Entry</a> 
      </span> 
     {% endif %} 

Есть ли способ сделать кнопки «Следующий» и «Предыдущий» перейти к следующему или предыдущему сообщению в категории текущих сообщений?

ответ

4

После небольшого исследования. Я нашел именно то, что я искал на этом BlogPost - http://ajclarkson.co.uk/blog/jekyll-category-post-navigation/

Просто нужно добавить плагин в каталог _plugin и добавить немного кода в нем:

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 

И вместо того, чтобы использовать page.next .url и page.prev.url в HTML, просто используйте page.next_in_category.url и page.previous_in_category.url.

Надеюсь, это поможет любому, кто испытывает ту же проблему.

4

Плагин ajclarkson для разбивки на страницы в категориях является правильным и полезным решением, если вы можете установить плагины.

Если вы хотите развернуть страницы Github, вы не сможете использовать плагины.

Я использую этот метод для разбивки на страницы по категориям. Это гарантирует, что пост из другой категории никогда не будет отображаться:

{% if page.next and page.next.categories contains "blog" %} 

    <a href="{{ page.next.url }}">Next Post</a> 

{% else if page.previous and page.previous.categories contains "blog" %} 

    <a href="{{ page.previous.url }}">Previous Post</a> 

{% endif %} 

Имейте в виду, это решение не будет найти следующий пост, если бы пропустить что-то из другой категории. Это позволяет избежать худшего (?) Сценария, который связывается с чем-то непреднамеренным/не-действительно-a-post.

+1

Это более полное решение, но оно намного длиннее: https://github.com/jekyll/jekyll/issues/260 – SimplGy

Смежные вопросы