因此,Hakyll已经有一个tagsField
可用于添加到模板,但是它将整个标签列表预先格式化为HTML字符串。我可以写一个自定义的tagsField
,但我想分开我的担忧:让Hakyll为每个页面建立一个标签列表,然后将其传递到{{1 }},以便我可以在其中使用listField
块来引用它。
我对Hakyll还是很陌生,但总体上还是Haskell的新手,所以我不太清楚函数的类型。对此方向的任何帮助都将受到赞赏。
答案 0 :(得分:0)
我刚刚意识到这是我自己的问题。哦,好了,这是我发现的答案,以防别人需要。
我还没有尝试过,但是改编自http://mattwetmore.me/posts/hakyll-list-metadata.html:
listContextWith :: Context String -> String -> Context a
listContextWith ctx s = listField s ctx $ do
identifier <- getUnderlying
metadata <- getMetadata identifier
let metas = maybe [] (map trim . splitAll ",") $ M.lookup s metadata
return $ map (\x -> Item (fromFilePath x) x) metas
listContext :: String -> Context a
listContext = listContextWith defaultContext
-- and in main, in the match postsPattern part:
tagContext = listContext "tags" <> defaultContext
阅读整篇文章,尝试尝试。应该可以。