4

假设我有这个 Hakyll 模板:

<h2>The archive</h2>
<p>This is an archive of all posts.</p>

<ul id="archive">
$partial("templates/post-list.html")$
</ul>

现在,我想提取静态文本并将其放入由 Hakyll 呈现为 HTML 的 MarkDown 文件中,并将其包含在模板中,如下所示:

$intro$

<ul id="archive">
$partial("templates/post-list.html")$
</ul>

我在网上找到了一个类似的问题,但它是针对旧版本的 Hakyll 的。

我的粗略想法是修改我site.hs生成的部分archive.html以包含另一个constField调用"intro"并将其传递给处理后的 MarkDown 文件:

    create ["archive.html"] $ do
    route idRoute
    compile $ do
        posts <- recentFirst =<< loadAll "posts/*"
        let archiveCtx =
                listField "posts" postCtx (return posts) `mappend`
                constField "title" "Archives"            `mappend`
                constField "intro" ???                   `mappend`
                defaultContext

        makeItem ""
            >>= loadAndApplyTemplate "templates/archive.html" archiveCtx
            >>= loadAndApplyTemplate "templates/default.html" archiveCtx
            >>= relativizeUrls

要处理 MarkDown 文件,我可能必须执行以下操作:

 match "archive/intro.md" $ do
    -- route $ setExtension "html" -- No route necessary, we only want file contents
    compile $ pandocCompiler

但是如何将处理后的文件加载到前面的代码片段中?

4

0 回答 0