假设我有这个 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
但是如何将处理后的文件加载到前面的代码片段中?