15

このチュートリアルで説明されているようなことをしようとしています。つまり、Hakyll ブログにタグを追加しますが、タグごとにページを生成するのではなく、すべてのタグとその投稿を一覧表示する 1 つのページを作成します。したがって、タグ付けされた 、Post1タグ付けされた、Tag1およびPost2タグ付けされた が与えられた場合、私は次のようになります。 Tag1, Tag2Post3Tag2tags.html

 Tag1: 
  - Post1
  - Post2
 Tag2: 
  - Post2
  - Post3

しかし、私は Haskell の初心者であり、Hakyll のモナド コンテキストのすべてを完全には理解していません。これが私がこれまでに持っているものです:

create ["tags.html"] $ do
    route idRoute
    tags <- buildTags "posts/*" (fromCapture "tags.html")
    compile $
        makeItem ""
            >>= applyTemplate tagListTemplate defaultContext
            >>= applyTemplate defaultTemplate defaultContext
            >>= relativizeUrls
            >>= cleanIndexUrls

Tags問題は、私のブログのコンテキストでは何が何なのかよくわからないことです。デバッグのためにそれらを印刷できないようです。( を追加してみましprint tagsたが、うまくいきません。) それで、これをどのように進めるかを考えるのに非常に苦労しています。

完全なファイルは GitHub にあります。

どんな助けでも大歓迎です。

更新:私はまだこれを理解することにあまり近づいていません。これが私が今試していることです:

create ["tags.html"] $ do
        route idRoute
        tags <- buildTags "posts/*" (fromCapture "tags.html#")
        let tagList = tagsMap tags
        compile $ do
            makeItem ""
              >>= applyTemplate tagListTemplate (defaultCtxWithTags tags)

一緒に:

-- Add tags to default context, for tag listing
defaultCtxWithTags :: Tags -> Context String
defaultCtxWithTags tags = listField "tags" defaultContext (return (tagsMap tags)) `mappend` defaultContext

現在のところ、完全なコードはここにあります。

これについての助けは大歓迎です。私はすべてのドキュメントを認識していますが、それを実際のコードに変換することはできないようです。

4

2 に答える 2