2016-09-28 79 views
1

我正在用Hakyll做一個網站,我想在同一頁面收集一些文章。我在網站上找到一些例子,如dannysuEAnalytica,但我的代碼不工作,我不明白爲什麼。每頁有多篇文章

我的代碼編譯正常,trace函數顯示所有的帖子都被加載,編譯成功,但所有的網頁應該包含3個帖子是空的。只有循環前的文本以及指向下一頁和前一頁的鏈接纔可見。

enter image description here

我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 

模板/ 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分頁的例子嗎?

+0

什麼是「生成的網頁」?它創建分頁文件嗎? 「什麼都不顯示」是什麼意思,每個文件都是空的? – Bergi

+0

我已添加一些精度。生成的頁面應該顯示3個帖子幾乎是空的。只顯示到下一頁和上一頁的鏈接。 – JeanJouX

+0

'for'循環是否運行並在結果文件中創建一些空格(空行),還是'tools'本身是空的? – Bergi

回答

1

這一基本編譯規則必須分頁之前運行:

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

然後,它的工作!

+1

你甚至不需要「路由」它 - 編譯它應該是足夠的(如模板) – Bergi