0.0.2 • Published 8 months ago

metalsmith-sectioned-blog-pagination v0.0.2

Weekly downloads
-
License
ISC
Repository
github
Last release
8 months ago

Metalsmith Sectioned Blog Pagination

Metalsmith plugin that generates paginated blog landing pages from a main blog template

metalsmith: plugin npm: version license: ISC

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-pagination

Yarn:

yarn add metalsmith-sectioned-blog-pagination

Usage

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/",
      }
    }
  ]
}

Author

werner@glinka.co

License

MIT