Пагинация в Jekyll

Как в Jekyll сделать постраничный вывод содержимого

📝 Примечание

Не используйте Jekyll. Описанное в статье решение работает только для файла index.html, лежащего в корневом каталоге.

Чтобы в Jekyll нормально работала навигация, нужно сделать несколько очевидных шагов и один неочевидный:

  1. Добавьте в Gemfile плагин jekyll-paginate:

    # frozen_string_literal: true
    
    source 'https://rubygems.org'
    
    gem 'jekyll'
    gem 'minima'
    gem 'rubocop'
    
    group :jekyll_plugins do
      gem 'jekyll-feed'
      gem 'jekyll-paginate'
      gem 'jekyll-sitemap'
    end
    
  2. Установите гемы:

    bundle install
    
  3. В конфигурационном файле _config.yml добавьте jekyll-paginate в список используемых плагинов:

    # ...
    ---
    plugins:
      - jekyll-feed
      - jekyll-paginate
      - jekyll-sitemap
    # ...
    
  4. В конфигурационном файле _config.yml укажите параметры пагинации, если хотите изменить настройки по умолчанию:

    paginate: 10
    paginate_path: "/posts/page:num/"
    
  5. Если в корне сайта лежит файл index.md — удалите его.

    Это самый сложный пункт. На сайте Jekyll ни слова о том, что плагин НЕ работает с Markdown.

  6. Создайте в корне сайта файл index.html, содержащий шаблон пагинации:

    {% raw %}---
    layout: default
    ---
    <ul>
      {% for post in paginator.posts %}
        <li><a href="{{ post.url }}">{{ post.title }}</a></li>
      {% endfor %}
    </ul>
    
    <div class="pagination">
      {% if paginator.previous_page %}
        <a href="{{ paginator.previous_page_path }}">&laquo; Назад</a>
      {% endif %}
    
      <span>Страница {{ paginator.page }} из {{ paginator.total_pages }}</span>
    
      {% if paginator.next_page %}
        <a href="{{ paginator.next_page_path }}">Вперёд &raquo;</a>
      {% endif %}
    </div>{% endraw %}
    
Создано при помощи Hugo
Тема Stack, дизайн Jimmy