从 jekyll 分页中的其他页面访问帖子

Access posts from other page in jekyll pagination

Jekyll 分页使您能够在页面上整齐地排列 post。我想将日期范围作为工具提示放在页面链接上,就像:

<li class="pager-item">
  <a href="page-2" title="News from Sep 24 to Sep 29">Page 2</a>
</li>

这样做的明显方法是获取页面上第一个和最后一个 post 的日期。不幸的是,jekyll-pagination 似乎只能通过 paginator.posts.

为当前页面提供 post 的列表

可能是我在documentation里面找不到,所以请问你:在jekyll分页中是否可以从另一个页面访问post的列表?类似于 paginator.pages.2.posts?

另一种方法是构建我自己的分页,这应该没问题,但我更愿意使用内置函数。

您可以间接获取信息:

  • paginator.previous_pagepaginator.next_page 分别为您提供上一页和下一页的页码,如果该页不存在,则为 nil
  • paginator.per_page 给出每页的帖子数。
  • paginator.total_posts 为您提供站点中的帖子总数。
  • site.posts 为您提供所有帖子的倒序列表。

因此给定当前 paginator 对象,确保 paginator.next_page != nil,您知道下一个分页页面的帖子在 site.posts 中从 a 到 [=22] 编入索引=](包括)与:

a = (paginator.next_page) * paginator.per_page
b = a + paginator.per_page - 1

最后一个分页可能不完整:记得检查 b < paginator.total_posts

确保 paginator.previous_page != nil,上一个分页页面也是如此:

a = (paginator.previous_page) * paginator.per_page
b = a + paginator.per_page - 1

我目前的做法是这样的:

{% if include.page > 0 and include.page <= paginator.total_pages %}
   {% assign first = include.page | minus:1 | times:paginator.per_page %}
   {% assign last = paginator.per_page | times:include.page | minus:1  %}
   {% if last > paginator.total_posts %}
      {% assign last = paginator.total_posts | minus:1 %}
   {% endif %}
   {{ site.posts[first].date | date: "%d.%m.%Y" }} bis  {{ site.posts[last].date | date: "%d.%m.%Y" }}
{% else %}
   OUT_OF_RANGE
{% endif %}

我真的不喜欢 Liquid-Syntax :D

或:

{% comment %} NOTE : shortcut "p" for "paginator" {% endcomment %}
{% assign p = paginator %}

{% comment %} date formating (see shorthand formats in Ruby's documentation : http://ruby-doc.org/core-2.3.3/Time.html#method-i-strftime) {% endcomment %}
{% assign dateFormat = "%y %b %d" %}

<ul>
{% for post in p.posts %}<li><a href="{{ post.url }}">{{ post.title }} - {{ post.date | date: dateFormat }}</a></li>
{% endfor %}
</ul>

{% comment %}++++++++++ if previous page == newest posts {% endcomment %}
{% if paginator.previous_page %}
  {% assign prevPage = p.page | minus: 1 %}
  {% assign prevPageLastIndex = prevPage | times: p.per_page | minus: 1  %}
  {% assign prevPageFirstIndex = prevPageLastIndex | minus: p.per_page | plus: 1 %}
  {% assign prevPagefirstPostDate = site.posts[prevPageFirstIndex].date | date: dateFormat %}
  {% assign prevPagenextPageLastPostDate = site.posts[prevPageLastIndex].date | date: dateFormat %}

  {% capture prevPageLink %}
  <p><a href="{{ paginator.previous_page_path }}"></p>
  Newest posts from
    {% if prevPagefirstPostDate != prevPagenextPageLastPostDate %}
      {{ prevPagenextPageLastPostDate }} to {{ prevPagefirstPostDate }}
    {% else %}
      {{ prevPagenextPageLastPostDate }}
    {% endif %}
  </a>
  {% endcapture %}

{% endif %}

{% comment %} ++++++++++ if next page = oldest posts {% endcomment %}
{% if paginator.next_page %}
  {% assign nextPage = p.page | plus: 1 %}
  {% assign nextPageFirstIndex = p.page | times: p.per_page %}

  {% comment %}>>Next page is not the last page = normal computing {% endcomment %}
  {% if nextPage != p.total_pages %}
    {% assign nextPageLastIndex = nextPageFirstIndex | plus: p.per_page | minus: 1 %}

  {% comment %}>>Next page is the last page compute index from p.total_posts{% endcomment %}
  {% else %}
    {% assign nextPageLastIndex = p.total_posts | minus: 1 %}

  {% endif %}

  {% assign nextPagefirstPostDate = site.posts[nextPageFirstIndex].date | date: dateFormat %}
  {% assign nextPageLastPostDate = site.posts[nextPageLastIndex].date | date: dateFormat %}

  {% capture nextPageLink %}
  <p><a href="{{ paginator.next_page_path }}"></p>
  Previous posts from
    {% if nextPagefirstPostDate != nextPageLastPostDate %}
      {{ nextPageLastPostDate }} to {{ nextPagefirstPostDate }}
    {% else %}
      {{ nextPageLastPostDate }}
    {% endif %}
  </a>
  {% endcapture %}

{% endif %}

{{ prevPageLink }}
{{ nextPageLink }}