1

因此,Hakyll 已经tagsField可以添加到模板中,但它会将整个标签列表预先格式化为 HTML 字符串。我可以编写一个 custom tagsField,但我想将我的关注点分开:让 Hakyll 为每个页面构建一个标签列表,然后将其传递给 a 中的模板,listField以便我可以在那里用一个$for(tags)$ ... $tags$ ... $endfor$块引用它。

我对 Hakyll 很陌生,而且总的来说还是 Haskell 的新手,所以我不太清楚我的函数的类型。对此方向的任何帮助表示赞赏。

4

1 回答 1

1

我才意识到这是我自己的问题。哦,这是我找到的答案,以防其他人需要它。

我没有尝试过,但改编自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

阅读整篇文章以尝试了解它。它应该工作。

于 2019-05-03T15:45:53.273 回答