如何在我的安装中包含 post 个预告片?

How can I include post teasers in my installation?

我正在关注 the official instructions on the Hakyll site 以获取 post 预告片并在我的网站上 运行。不幸的是,我遇到了麻烦,说明也帮不上什么忙。

我收到此代码段中引用的 item 值的超出范围错误:

loadAndApplyTemplate
     "template/postitem.html"
     (teaserField "teaser" "content" <> defaultContext)
     item

将其嵌入我的 site.hs 时。出于可重复性的考虑,也没有明确说明 <> 运算符的来源;这需要导入 Literate Haskell 的模块之一。

完全不清楚对 item 的引用从何而来,因为这是一个相当常见的词,即使使用 findgrep 我也必须筛选数千个结果在我的机器上。

我应该在此处声明或导入什么才能访问 item

教程页面不是完整的示例。 item 不是对某些函数的引用。它只是 Item. Usually you'll get it from pandocCompiler or one of the many other "compilers". In this example, loadAndApplyTemplate 的占位符名称,就像它的任何其他用法一样。唯一的区别是 $teaser$ 将绑定到模板中的前导文本。

也就是说,这并不是一个很好的例子,因为您通常希望在列出多个帖子的页面上使用前导文本。这可能涉及使用 listField 来制作您将在模板中迭代的帖子集合。例如,这是我的索引页面的规则:

match "index.html" $ do
    route idRoute
    compile $ do
        posts <- fmap (take indexRecentPostCount) . recentFirst =<< loadAllSnapshots postsPattern "postContent"
        let indexCtx =
                constField "title" "Home" <>
                baseCtx

        getResourceBody
            >>= applyAsTemplate (listField "posts" (teaserField "teaser" "postContent" <> postCtx) (return posts) <> indexCtx)
            >>= loadAndApplyDefaultTemplate indexCtx
            >>= relativizeUrls

本例中的"item"就是getResourceBodyreturns,即index.html的正文。这会将 $posts$ 绑定到帖子列表。忽略元数据,我的 index.html 只是:

$for(posts)$
    $partial("templates/teaser.html")$
$endfor$

$teaser$ 然后绑定在 template/teaser.html 模板中。