3

我有一个类别列表。每个类别本身都有一个子类别列表:[(Category,[SubCategory])]. 我想在单个页面中获得以下 HTML 输出:

<h2>Category 1</h2>

<ul>
  <li>Subcategory 1</li>
  <li>Subcategory 2</li>
</ul>

<h2>Category 2</h2>

<ul>
  <li>Subcategory 1</li>
  <li>Subcategory 2</li>
</ul>

我找不到这样做的好方法。我需要申请makeItem列表并做类似的事情吗

categoryList = [("Category 1",["Subcategory 1","Subcategory 2"])]

compile $ do
  makeItem (map fst categoryList)
  >>= loadAndApplyTemplate "templates/categories.html" defaultContext

如何在上下文中添加子类别以便它们在模板中可用?

也许我需要拆分两个创建步骤(类似于mapM $ makeItem (map fst categoryList) >> loadAndApplyTemplate ".." contextWithCategories然后以某种方式在实际页面生成中引用生成的数据)?

4

1 回答 1

3

我自己解决了这个问题。有关详细说明,请参阅此帖子

这是实际执行此操作的代码:

create ["test.html"] $ do
  route idRoute
  compile $ do
  let ctx =
          listField "parents" 
                    (
                     field "parent" (return . fst . itemBody) <>
                     listFieldWith "children" 
                                   (field "child" (return . itemBody)) 
                                   (sequence . map makeItem . snd . itemBody)
                    ) 
                    (sequence [makeItem ("p1",["c1","c2"]), 
                               makeItem ("p2",["p3","p4"])]) <>
          defaultContext
  makeItem ""
      >>= loadAndApplyTemplate "templates/testing.html" ctx
      >>= loadAndApplyTemplate "templates/default.html" defaultContext
      >>= relativizeUrls
于 2015-08-18T10:04:56.527 回答