因此Hakyll已经有了一个可以添加到模板中的tagsField,但是它将整个标记列表预先格式化为一个HTML。我可以编写一个自定义的tagsField,但是我想将我的关注点分开:让Hakyll为每个页面构建一个标记列表,然后将它传递给listField中的模板,这样我就可以用$for(tags)$ ... $tags$ ... $endfor$块引用它了。
我对Hakyll非常陌生,而且还是Haskell的新手,所以我不太清楚我的函数的类型。任何在这方面的帮助都是非常感谢的。
发布于 2019-05-03 15:45:53
我刚意识到这是我自己的问题。哦,好吧,这是我找到的答案,以防别人需要。
我还没试过这个,但是从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读完整篇文章,试着摸索一下。应该管用的。
https://stackoverflow.com/questions/53657570
复制相似问题