metalsmith-sectioned-blog-pagination v0.0.2
Metalsmith Sectioned Blog Pagination
Metalsmith plugin that generates paginated blog landing pages from a main blog template
Metalsmith Sectioned Blog Pagination creates metadata for blog pagination for pages built with a modular page building paradigm.
Installation
NPM:
npm install metalsmith-sectioned-blog-paginationYarn:
yarn add metalsmith-sectioned-blog-paginationUsage
Pass metalsmith-sectioned-blog-pagination to metalsmith.use :
The plugin must be used before the Markdown, Permalinks and Layouts plugins.
import blogPages from `metalsmith-sectioned-blog-pagination`;
Metalsmith( __dirname )
.use(collections({
blog: {
pattern: "blog/*.md",
sortBy: "date",
reverse: true,
limit: 50,
},
}))
.use(blogPages({
"pagesPerPage": 12,
"blogDirectory": "blog/",
}))
.use(markdown())
.use(permalinks())
.use(layouts())
.
.During the build process, the plugin will create a set of blog landing pages with the specified number of blog posts per page, e.g. /blog/, /blog/2, /blog/3... In a Nunjucks template, a pager would be constructed like this:
<ul class="blogs-pagination">
{% for i in range(0, params.numberOfPages) -%}
<li {% if ((i + 1) == params.pageNumber) %}class="active"{% endif %}>
{% if i == 0 %}
<a href="/blog/">1</a>
{% else %}
<a href="/blog/{{ i + 1 }}/">{{ i + 1 }}</a>
{% endif %}
</li>
{%- endfor %}
</ul>Here is the complete template for such a blog landing page. And here is the implementation.
Debug
To enable debug logs, set the DEBUG environment variable to metalsmith-sectioned-blog-pagination:
metalsmith.env('DEBUG', 'metalsmith-sectioned-blog-pagination*')CLI usage
To use this plugin with the Metalsmith CLI, add metalsmith-sectioned-blog-pagination to the plugins key in your metalsmith.json file:
{
"plugins": [
{
"metalsmith-sectioned-blog-pagination": {
"pagesPerPage": 12,
"blogDirectory": "blog/",
}
}
]
}