Jekyll paginate: смещение смещает все страницы, а не только первую

У меня возникла проблема при использовании Jekyll (который использует язык шаблонов Liquid), плагинов jekyll-paginate-v2 и offset.

Проблема: в моем блоге есть специальный раздел, в котором всегда отображаются самые свежие сообщения. Остальные сообщения появляются ниже, по 10 на страницу с разбивкой на страницы.

Я попытался просто показать их с помощью {% for post in paginator.posts offset:1 %}, но у этого есть два недостатка:

  • он показывает только 9 сообщений на странице вместо 10
  • он смещает первое сообщение на каждой странице, так что 1-е, 10-е, 20-е и т. д. сообщения скрыты, что я не хочу

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

Я просто неправильно использую offset, или это ошибка в jekyll-paginate-v2?

Прямо сейчас я "исправил" это, выполнив следующие действия, но это не идеально, поскольку на первой странице отображается только 9 сообщений:

<div class="articles-showcase row post-list">
{% assign featuredpost = site.posts.first %}
  {% for post in paginator.posts %}
  {% if post == featuredpost %}
  {% continue %}
  {% else %}
  <!-- Article Card -->
  <div class="article-detail-box col-lg-6 col-md-6 col-sm-12 card-article-div" data-cat="{{post.category | join: ','}}">
    <div class="card card-article box-shadow h-100">
      <a href="{{ site.baseurl }}{{post.url}}" class="card-article-linker" title="{{post.title}}"></a>
      <div class="img-div text-center post-card-header bg-gray">
        <img src="{{ site.baseurl }}{{post.image}}" alt="{{post.title}}">
      </div>
      <div class="card-article-body">
        <p class="author-name">{{post.author}} | {{ post.date | date: '%B %d, %Y' }}</p>
        <a href="{{site.baseurl}}{{post.url}}">
          <h5>{{post.title}}</h5>
        </a>
        <div class="article-description">{{post.content}}</div>
      </div>
    </div>
  </div>
  {% endif %}
  {% endfor %}
</div>

person bildungsroman    schedule 10.07.2018    source источник


Ответы (3)


Я поднял эту проблему перед разработчиками jekyll-paginate-v2, и теперь она решена: https://github.com/sverrirs/jekyll-paginate-v2/issues/100

person bildungsroman    schedule 30.08.2018

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

---
layout: page
pagination: 
  enabled: false
---

В противном случае вам нужно либо исключить плагин paginator-v2 и написать свою собственную логику для разбивки на страницы, либо расширить плагин в вашем _plugins каталоге, чтобы данные сообщений, отправленные в плагин paginate, уже исключали первый (фактически последний, потому что обратная сортировка будет будет сделано потом.) пост.

person Keith Mifsud    schedule 11.07.2018
comment
Я действительно подумал об этом, но вручную установить самую новую публикацию как избранную - это именно то, чего я хочу избежать. Я хочу, чтобы он автоматически отображал последний пост, чтобы у авторов постов было на одну проблему меньше, о чем можно было бы беспокоиться (и, возможно, облажаться). - person bildungsroman; 11.07.2018
comment
Я подумаю о том, чтобы изменить плагин или создать свой собственный. Проблема в том, что я разработчик python / JS, а не Ruby :) - person bildungsroman; 11.07.2018

Я собрал ошибочное решение, которое использую, пока не появится что-нибудь получше. Я сейчас поделюсь им здесь:

   <div class="articles-showcase row post-list">
  {% if paginator.page == 1 %}
    {% for post in site.posts limit:11 %}
    {% if post == featuredpost %}
      {% continue %}
    {% else %}
    <!-- Article Card -->
    <div class="article-detail-box col-lg-6 col-md-6 col-sm-12 card-article-div" data-cat="{{post.category | join: ','}}">
      <div class="card card-article box-shadow h-100">
        <a href="{{ site.baseurl }}{{post.url}}" class="card-article-linker" title="{{post.title}}"></a>
        <div class="img-div text-center post-card-header bg-gray">
          <img src="{{ site.baseurl }}{{post.image}}" alt="{{post.title}}">
        </div>
        <div class="card-article-body">
          <p class="author-name">{{post.author}} | {{ post.date | date: '%B %d, %Y' }}</p>
          <a href="{{site.baseurl}}{{post.url}}">
            <h5>{{post.title}}</h5>
          </a>
          <div class="article-description">{{post.content}}</div>
        </div>
      </div>
    </div>
    {% endif %}
  {% endfor %}
  {% endif %}
  {% if paginator.page > 1 %}
  {% for post in paginator.posts %}
    <!-- Article Card -->
    <div class="article-detail-box col-lg-6 col-md-6 col-sm-12 card-article-div" data-cat="{{post.category | join: ','}}">
        <div class="card card-article box-shadow h-100">
          <a href="{{ site.baseurl }}{{post.url}}" class="card-article-linker" title="{{post.title}}"></a>
          <div class="img-div text-center post-card-header bg-gray">
            <img src="{{ site.baseurl }}{{post.image}}" alt="{{post.title}}">
          </div>
          <div class="card-article-body">
            <p class="author-name">{{post.author}} | {{ post.date | date: '%B %d, %Y' }}</p>
            <a href="{{site.baseurl}}{{post.url}}">
              <h5>{{post.title}}</h5>
            </a>
            <div class="article-description">{{post.content}}</div>
          </div>
        </div>
      </div>
  {% endfor %}
  {% endif %}
</div>

Основная проблема заключается в том, что вторая страница с разбивкой на страницы снова показывает последнюю статью на первой странице. Однако для меня это лучше, чем показывать только 9 сообщений на первой странице. Приветствуется любое лучшее решение!

person bildungsroman    schedule 10.07.2018