我正在与Hakyll建立一个网站,我想在同一页面收集一些帖子。我在dannysu或EAnalytica等网站上找到了一些示例,但我的代码无效,我不明白为什么。
我的代码编译正常,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$
—
$currentPageNum$ of $numPages$
—
$if(nextPageNum)$
<a href="$nextPageUrl$">next</a>
$else$
$endif$
您是否知道我的代码有什么问题?
你知道另一个与哈基尔分页的例子吗?
答案 0 :(得分:1)
此基本编译规则必须在分页前运行:
tools = do
match "tools/*" $ do
route $ setExtension "html"
compile $ compiler
>>= loadAndApplyTemplate "templates/tools.html" postCtx
>>= relativizeUrls
然后,它工作!