1

我正在用 Hakyll 制作一个网站,我想在同一页面上收集一些帖子。我在dannysuEAnalytica等网站上找到了一些示例,但我的代码不起作用,我不明白为什么。

我的代码编译正常,trace函数显示所有帖子都已加载,编译成功,但所有应该包含 3 个帖子的网页都是空的。只有循环之前的文本以及指向下一页和上一页的链接是可见的。

在此处输入图像描述

我的 Hakyll 代码如下。

toolsPages = do
  pag <- buildPaginateWith grouper "tools/*" makeId
  paginateRules pag $ \pageNum pattern -> trace (show pag) $ do
      route idRoute
      compile $ do
          posts <- recentFirst =<< loadAll pattern
          let paginateCtx = paginateContext pag pageNum
              ctx =
                  constField "title" ("Tools - Page " ++ (show pageNum)) <>
                  listField "tools" (postCtx) (return posts) <>
                  paginateCtx <>
                  defaultContext
          makeItem ""
              >>= loadAndApplyTemplate "templates/outils-pag.html" ctx
              >>= relativizeUrls

grouper ids = (liftM (paginateEvery 3) . sortRecentFirst) ids

makeId pageNum = fromFilePath $ "blog/page/" ++ (show pageNum) ++ "/index.html"

postCtx :: Context String
postCtx =
  dateField "date" "%d / %m / %Y"
  `mappend` bodyField "body"
  `mappend` defaultContext

templates/outils-pag.html 模板包含以下内容。

some text before the loop
$for(tool)$
some text inside the loop
$date$
$teaser$
$body$
$endfor$

$if(previousPageNum)$
<a href="$previousPageUrl$">previous</a>
$else$
$endif$
&mdash;
$currentPageNum$ of $numPages$
&mdash;
$if(nextPageNum)$
<a href="$nextPageUrl$">next</a>
$else$
$endif$

你知道我的代码有什么问题吗?
你知道另一个使用 Hakyll 进行分页的例子吗?

4

1 回答 1

1

这个基本的编译规则必须在分页之前运行:

tools = do
  match "tools/*" $ do
    route $ setExtension "html"
    compile $ compiler
      >>= loadAndApplyTemplate "templates/tools.html"    postCtx
      >>= relativizeUrls

然后,它工作!

于 2016-09-29T21:43:38.553 回答