Jekyll paginate: смещение, смещение всех страниц, а не только первой
Я столкнулся с проблемой при использовании Jekyll (который использует язык шаблонов Liquid), плагин jekyll-paginate-v2
а также offset
,
Проблема: у меня есть специальный раздел в моем блоге, который всегда показывает самый последний пост. Другие сообщения появляются ниже, 10 на страницу, используя paginate.
Я пытался просто показать их, используя {% 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>
3 ответа
Я поднял это как проблему для разработчиков jekyll-paginate-v2, и теперь она решена: https://github.com/sverrirs/jekyll-paginate-v2/issues/100
В качестве быстрого решения вы сможете вручную добавить свойство front-material к последнему сообщению:
---
layout: page
pagination:
enabled: false
---
В противном случае вы должны либо исключить плагин paginator-v2 и написать свою собственную логику для разбивки на страницы, либо расширить плагин в своем _plugins
dir, чтобы данные постов, отправленные в плагин paginate, уже исключали первое (на самом деле последнее, потому что после этого будет произведена обратная сортировка.).
Я взломал ошибочное решение, которое я использую, пока не появится что-то лучшее. Я поделюсь этим здесь сейчас:
<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>
Основная проблема в том, что 2-я страница разбита на страницы, снова показывает последнюю статью на 1-й странице. Для меня это лучше, чем показывать только 9 сообщений на первой странице. Любое лучшее решение будет с благодарностью!