This is a followup to my previous post, building this site using Node.js and Metalsmith.


The Plugin

After installing the plugin with npm:

npm install metalsmith-tags --save

I required the plugin in build.js

var tags = require('metalsmith-tags');

Placing it in the correct order of the Metalsmith pipeline required a bit of trial and error. I ended up with it directly after the .destination method.

Metalsmith(__dirname)
  .source('./src')
  .destination('./build')
  .use(tags({
    handle: 'tags',
    path: 'blog/:tag.html',
    layout: 'tag.jade'
  }))
  // plugins continued

I defined some basic properties for the plugin. The path to the tag archive will be simply blog/tag.html.

( e.g. the tag code will be located at /blog/code )


The Tag Template

The tag.jade template is very similar to the blog.jade template.

//- tag.jade
extends layout
block content
  h4 Posts about
    //- get the tag url and name
    a(href="/blog/#{tag}").tag #{tag}
  ul.post-list
    //- get each post with this tag
    each post in pagination.files
      li.post-item
        h5.title
          a(href="/#{post.path}")
           =post.title
        include partials/_details.jade
      hr

Adding tags to a post

Adding tags to the post metadata is as simple as adding comma separated values to tags:

---
title: Using Metalsmith - Adding Tags
slug: creating-this-site-part-2
publishDate: 2015-10-17
author: Eric Jinks
layout: post.jade
tags: code, nodejs, metalsmith
---

Displaying this on individual posts is in the post.jade template is performed with an each statement.

if tags && tags.length > 0
  .tags
    each tag, index in tags
      a(href="/blog/#{tag}").tag #{tag}
      if index != tags.length -1
        | ,

What Next?

(Read Part 3 here)

I like how some popular blog sites like Medium display an estimated reading time for each post.


More info

How I built this site using Node.js
metalsmith-tags