修改Hakyll示例站点

pga*_*gay 6 blogs haskell web hakyll

我希望修改以下代码,以便不是生成网站上最新三个帖子的链接,而是完全重现帖子的正文,就像在传统博客中一样.我在理解下面发生的事情时遇到了一些困难,以及必要的改变是什么.

match "index.html" $ do
    route idRoute
    compile $ do
        let indexCtx = field "posts" $ \_ ->
                            postList $ fmap (take 3) . recentFirst

        getResourceBody
            >>= applyAsTemplate indexCtx
            >>= loadAndApplyTemplate "templates/default.html" postCtx
            >>= relativizeUrls
Run Code Online (Sandbox Code Playgroud)

jas*_*vdj 3

这并不完全是微不足道的。第一步是引入快照

如教程中所述,这可确保您可以将博客文章包含在索引中,而无需先将模板应用到 HTML。所以你会得到类似的东西:

match "posts/*" $ do
    route $ setExtension "html"
    compile $ pandocCompiler
        >>= loadAndApplyTemplate "templates/post.html"    postCtx
        >>= saveSnapshot "content"
        >>= loadAndApplyTemplate "templates/default.html" postCtx
        >>= relativizeUrls
Run Code Online (Sandbox Code Playgroud)

现在,为了在索引页面上显示帖子,您将能够使用整个$body$帖子。为此,您只需更新templates/post-item.html为:

<div>
    <a href="$url$"><h2>$title$</h2></a>
    $body$
</div>
Run Code Online (Sandbox Code Playgroud)