Index page generator for Jekyll sites. Generates paginated index pages for blog posts, categories and tags. It can also generate a paginated yearly archive, author and collection pages.
Add this line to your Gemfile:
gem "jekyll-index-pages"
And then execute:
$ bundle
Or install it yourself as:
$ gem install jekyll-index-pages
Finally add this line to gems setting in your _config.yml file:
gems:
- jekyll-index-pages
If you want to generate index pages for your blog posts, you can add the following settings to your _config.yml file:
index_pages:
posts:
title: Post Listing Page Title
excerpt: Post listing page excerpt
per_page: 20
permalink: /blog/
layout: blog
This will tell the plugin to generate index pages with given title and excerpt, using the layout named _layouts/blog.html. Each index page will contain up to 20 documents. First page can be accessed at /blog/. Subsequent pages can be accessed at /blog/<page-num>/.
Documents are sorted automatically using document's
datesetting, the first being the most recent.
If you want to generate index pages for categories, add the categories setting to index_page section:
index_pages:
categories:
...
The same reasoning applies if you want to generate index pages for tags:
index_pages:
tags:
...
Yearly archive:
index_pages:
archive:
...
And author pages:
index_pages:
authors:
...
For collection index pages, you need to include the collection name:
index_pages:
custom_name:
collection: collection_name
...
Default values for each setting are:
title: :label
excerpt: :label
per_page: 10
permalink: /:label/
For categories and tags, :label variable refers to the category or tag name. For posts, :label will always be equal to posts. For the archive, :label refers to any given year. For authors, :label is the author name. :label value is slugified when composing the permalink.
Note there is no default value for layout. You must always specify this setting otherwise pages will be generated blank, with no markup.
Because this plugin transliterates the URL for generated pages, you need to define a language as follows:
lang: en-US
Then get the specified locale file from https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale and add it to the _locales/ directory inside your site codebase.
To include custom data in the template, you must define a variable in the configuration under the data section:
index_pages:
posts:
layout: blog
data:
custom: This is a custom data item
In this case, you can print the contents of the custom variable in the _layouts/blog.html layout like this:
{{ page.custom }}
To include the paginated documents in your layouts, you can use the pager variable as demonstrated next:
{% assign pager = page.pager %}
{% for doc in pager.docs %}
<h2>{{ doc.title }}</h2>
{{ doc.excerpt }}
<a href="{{ doc.url }}">Read more...</a>
{% endfor %}
Each document in pager.docs is a Jekyll document, so you can access all its variables as normally do when developing a layout.
To include the pagination, you can do the following:
{% assign pager = page.pager %}
{% if pager.total_pages > 1 %}
{% if pager.prev_page > 0 %}
<a href="{{ pager.prev_page_url }}">Prev. page</a>
{% endif %}
<span>Page {{ pager.current_page }} of {{ pager.total_pages }}</span>
{% if pager.next_page > 0 %}
<a href="{{ pager.next_page_url }}">Next page</a>
{% endif %}
{% endif %}
Sometimes you will need to link index pages, for example when building some kind of category navigation. For this particular use case, you can use {% category_url %}, {% tag_url %}, {% author_url %} and {% archive_url %} tags for getting the correct URL to a given index page.
<a href="{% category_url "Category name" %}">Category name</a>
<a href="{% tag_url "Tag name" %}">Tag name</a>
<a href="{% author_url "Author Name" %}">Author Name</a>
<a href="{% archive_url "2001" %}">2001</a>
You can pass the argument directly as a string or as a variable.
The following example demonstrates how to create a basic category navigation:
<ul>
{% for category in site.categories %}
<li><a href="{% category_url category[0] %}">{{ category[0] }}</a></li>
{% endfor%}
</ul>
After checking out the repo, run script/setup to install dependencies. Then, run rake spec to run the tests. You can also run script/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/rukbotto/jekyll-index-pages.
The gem is available as open source under the terms of the MIT License.