Jekyll: ссылка следующая / предыдущая отсортированные сообщения в категории - PullRequest
0 голосов
/ 18 апреля 2020

Мне нужно сгенерировать две кнопки, ссылающиеся на следующие и предыдущие сообщения из той же категории. Сообщения сортируются с использованием начального значения order и целочисленного значения.

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

{% capture the_cat %}{{page.categories | first}}{% endcapture %}
{%- assign sorted_posts = site.categories[the_cat] | sort: 'order' -%}

{%- for post in sorted_posts -%}
  {% if post.url == page.url %}
    {% assign post_index0 = forloop.index0 %}
    {% assign post_index1 = forloop.index | plus: 1 %}
  {% endif %}
{%- endfor -%}

{%- for post in sorted_posts -%}
  {% if post_index0 == post.order %}
    {% assign prev_post = post %}
  {% endif %}
  {% if post_index1 == post.order %}
    {% assign next_post = post %}
   {% endif %}
{%- endfor -%}

И наконец ...

{%- if prev_post != null -%} ... {%- endif -%}
{%- if next_post != null -%} ... {%- endif -%}

Основной l oop кажется правильным. В категории с 3 отсортированными сообщениями возвращается 1, 2, 3. Как это исправить? Может быть исправлено только с одним l oop, что делает код более эффективным? Спасибо!

PD: Я успешно использовал этот плагин , однако этот плагин сортирует сообщения по date, а не по order.

1 Ответ

0 голосов
/ 21 апреля 2020

Наконец, я получил решение:

{%- capture the_cat -%}{{page.categories | first}}{%- endcapture -%}
{%- assign sorted_posts = site.categories[the_cat] | sort: 'order' -%}

{%- for post in sorted_posts -%}
    {%- if post.url == page.url -%}

    {%- assign currIndex = forloop.index0 -%}
    {%- assign prevIndex = currIndex | minus: 1 -%}
    {%- assign nextIndex = currIndex | plus: 1 -%}
    {%- assign articleIndexLength = forloop.length | minus: 1 -%}

    {%- if currIndex == articleIndexLength -%}
        {%- assign prev_post = sorted_posts[prevIndex] -%}
    {%- endif -%}

    {%- if currIndex < articleIndexLength and currIndex != 0 -%}
        {%- assign prev_post = sorted_posts[prevIndex] -%}
        {%- assign next_post = sorted_posts[nextIndex] -%}
    {%- endif -%}

    {%- if currIndex == 0 -%}
        {%- assign next_post = sorted_posts[nextIndex] -%}
    {%- endif -%}

    {%- endif -%}
{%- endfor -%}

Мне нужен был только один l oop с тремя условиями.

...