Пейджирование
На многих веб-сайтах — особенно блогах — очень распространённо разбивать основной список записей на меньшие списки и отображать их на нескольких страницах. Jekyll предлагает плагин пейджирования, так что вы можете автоматически генерировать необходимые файлы и папки для постраничного отображения.
Для Jekyll 3, включите плагин jekyll-paginate в ваш Gemfile и в вашу _config.yml под plugins. Для Jekyll 2 это стандартно.
Пейджирование работает только в файлах HTML
Пейджирование не работает изнутри файлов Markdown вашего сайта Jekyll. Пейджирование работает, когда вызывается изнутри файла HTML, названного
index.html, который необязательно может находиться в и генерировать пейджирование из подкаталога, через параметр конфигурацииpaginate_path.
Включить пейджирование
Чтобы включить пейджирование для записей в вашем блоге, добавьте строку в файл _config.yml, которая указывает, сколько элементов должно быть отображено на каждой странице:
paginate: 5
Это число должно быть максимальным количеством записей, которые вы хотите отображать на каждой странице сгенерированного сайта.
Вы также можете указать местоположение страниц пейджирования:
paginate_path: "/blog/page:num/"
Это позволит прочитать blog/index.html, отправить каждую страницу пейджирования в Liquid как paginator и записать вывод в blog/page:num/, где :num — номер страницы пейджирования, начиная с 2.
Если на сайте есть 12 записей и указано paginate: 5, Jekyll запишет blog/index.html с первыми 5 записями, blog/page2/index.html со следующими 5 записями и blog/page3/index.html с последними 2 записями в каталог назначения.
Не устанавливайте пермалинк
Установка пермалинка в метаданных вашей страницы блога вызовет сбой пейджирования. Просто опустите пермалинк.
Пейджирование для категорий, тегов и коллекций
Более новый плагин jekyll-paginate-v2 поддерживает больше функций. См. примеры пейджирования в репозитории. Этот плагин не поддерживается GitHub Pages.
Доступные атрибуты Liquid
Плагин пейджирования предоставляет объект Liquid paginator с следующими атрибутами:
| Переменная | Описание |
|---|---|
| Номер текущей страницы |
| Количество записей на страницу |
| Записи, доступные для текущей страницы |
| Общее количество записей |
| Общее количество страниц |
| Номер предыдущей страницы или |
| Путь к предыдущей странице или |
| Номер следующей страницы или |
| Путь к следующей странице или |
Пейджирование не поддерживает теги или категории
Страницы пейджирования перебирают все записи в переменной
posts, если запись не имеетhidden: trueв своих метаданных. В настоящее время это не позволяет создавать страницы пейджирования по группам записей, связанных общим тегом или категорией. Это не может включать никакую коллекцию документов, потому что ограничено записями.
Отображение постранично сгруппированных записей
Следующее, что вам нужно сделать, — это фактически отобразить ваши записи в списке, используя переменную paginator, которая теперь будет вам доступна. Вы, вероятно, захотите сделать это на одной из основных страниц вашего сайта. Вот один пример простого способа отображения постраничных записей в файле HTML:
---
layout: default
title: My Blog
---
<!-- This loops through the paginated posts -->
{% for post in paginator.posts %}
<h1><a href="{{ post.url }}">{{ post.title }}</a></h1>
<p class="author">
<span class="date">{{ post.date }}</span>
</p>
<div class="content">
{{ post.content }}
</div>
{% endfor %}
<!-- Pagination links -->
<div class="pagination">
{% if paginator.previous_page %}
<a href="{{ paginator.previous_page_path }}" class="previous">
Previous
</a>
{% else %}
<span class="previous">Previous</span>
{% endif %}
<span class="page_number ">
Page: {{ paginator.page }} of {{ paginator.total_pages }}
</span>
{% if paginator.next_page %}
<a href="{{ paginator.next_page_path }}" class="next">Next</a>
{% else %}
<span class="next ">Next</span>
{% endif %}
</div>
Осторожно, особый случай первой страницы
Jekyll не генерирует папку «page1», поэтому приведенный выше код не будет работать, когда создаётся ссылка на
/page1. См. ниже способ обработки этого, если это для вас проблема.
Следующий фрагмент HTML должен обрабатывать первую страницу и отображать список каждой страницы со ссылками на все страницы, кроме текущей.
{% if paginator.total_pages > 1 %}
<div class="pagination">
{% if paginator.previous_page %}
<a href="{{ paginator.previous_page_path | relative_url }}">« Prev</a>
{% else %}
<span>« Prev</span>
{% endif %}
{% for page in (1..paginator.total_pages) %}
{% if page == paginator.page %}
<em>{{ page }}</em>
{% elsif page == 1 %}
<a href="{{ '/' | relative_url }}">{{ page }}</a>
{% else %}
<a href="{{ site.paginate_path | relative_url | replace: ':num', page }}">{{ page }}</a>
{% endif %}
{% endfor %}
{% if paginator.next_page %}
<a href="{{ paginator.next_page_path | relative_url }}">Next »</a>
{% else %}
<span>Next »</span>
{% endif %}
</div>
{% endif %}
© 2020 Jekyll Core Team and contributors
Licensed under the MIT license.
https://jekyllrb.com/docs/pagination/