0

にフィールドを追加したいと思いdefaultContextます。これにより、すべてのページで利用できるリンクのリストが作成されます。私はそれ自体を変更できるとは思わないのでdefaultContext、 に を追加し、すべての参照をそれに置き換える関数を作成しlistFieldましdefaultContextdefaultContext。プログラムが準拠している間、私の新しいlistFieldものは空です。

これは私の最近の試みです。

-- site.hs
match "index.html" $ do
    route idRoute
    compile $ do
        links <- sortByTitle =<< loadAll "links/*"
        let indexCtx =
                listField "links" linkCtx (return links) `mappend`
                constField "title" "Home"                `mappend`
                myCtx

        getResourceBody
            >>= applyAsTemplate indexCtx
            >>= loadAndApplyTemplate "templates/default.html" indexCtx
            >>= relativizeUrls

match "templates/*" $ compile templateBodyCompiler

myCtx =
  listField "navItems" defaultContext (loadAll "nav/*") `mappend`
  defaultContext

-- nav/item.markdown
---
title: nav item 1
---

-- templates/default.html
<ul>
    $for(navItems)$
        $title$
    $endfor$
</ul>
4

1 に答える 1

1

アイテムをロードするときは、そのアイテムでコンパイル ターゲットを指定する必要があります。 load関数を参照してください。

load :: (Binary a, Typeable a) => Identifier -> Compiler (Item a)

他の場所でコンパイルされたアイテムをロードします。必要なアイテムがまだコンパイルされていない場合は、ビルド システムが自動的に処理します。

route単純な (必要ありません) コンパイラを追加すると、問題が修正されます。

match "nav/*" $ compile pandocCompiler
于 2016-09-19T06:58:58.243 に答える