Now this blog has tags! I figured this feature out with Hakyll earlier in the summer while building Hakyll-CSS Garden Gallery, so conveniently I had the code available for reference.
In your main function, you want to create the tags object and pass it into tagRules.
tags <- buildTags "blog/*" (fromCapture "tags/*.html")
-- Generate content for the tag pages
tagsRules tags \tag pattern -> do
let title = "Themes tagged \'" ++ tag ++ "\'"
route idRoute
compile do
posts <- recentFirst =<< loadAll pattern
let ctx =
constField "title" title <>
listField "posts" postCtx (return posts) <>
siteCtx
makeItem ""
>>= loadAndApplyTemplate "templates/tag.html" ctx
>>= loadAndApplyTemplate "templates/default.html" ctx
>>= relativizeUrls
Also, you want a post with tags
postCtxWithTags :: Tags -> Context String
postCtxWithTags tags =
tagsField "tags" tags <>
field "nextPost" nextPostUrl `mappend`
field "prevPost" previousPostUrl `mappend`
postCtx
Then in your post building section, you want to pass this into your pandocCompiler
pandocCompiler
>>= saveSnapshot "teaser"
>>= loadAndApplyTemplate "templates/post.html" (postCtxWithTags tags)
>>= loadAndApplyTemplate "templates/default.html" (postCtxWithTags tags)
>>= relativizeUrls
Enjoy the post? Let me know on twitter @katychuang.