Как я могу включить пост тизеры в мою установку?

Я следую официальным инструкциям на сайте Hakyll, чтобы настроить почтовые тизеры на моем сайте. К сожалению, я столкнулся с проблемой, и инструкции не очень помогают.

Я получаю ошибку вне области видимости для item значение, указанное в этом фрагменте:

loadAndApplyTemplate
     "template/postitem.html"
     (teaserField "teaser" "content" <> defaultContext)
     item

При встраивании его в мой site.hs, Что касается воспроизводимости ради, также не было ясно, где <> оператор пришел из; для этого потребовался импорт одного из модулей Literate Haskell.

Совершенно неясно, где эта ссылка на item и потому что это довольно распространенное слово, мне приходится просеивать тысячи результатов даже при использовании find а также grep на моей машине.

Что я должен объявить или импортировать, чтобы получить доступ к item Вот?

1 ответ

Решение

Страница учебника не является полным примером. item не ссылка на какую-то функцию. Это просто имя заполнителя для Item, Обычно вы получите это от pandocCompiler или один из многих других "компиляторов". В этом примере loadAndApplyTemplate так же, как любое другое использование этого. Единственная разница в том, что $teaser$ будет привязан к тексту тизера в шаблоне.

Тем не менее, это не очень хороший пример, так как вы обычно хотите использовать текст тизера на странице, содержащей несколько постов. Это, вероятно, будет связано с использованием listField создать коллекцию постов, которые вы будете повторять в шаблоне. Например, это правило для моей страницы индекса:

match "index.html" $ do
    route idRoute
    compile $ do
        posts <- fmap (take indexRecentPostCount) . recentFirst =<< loadAllSnapshots postsPattern "postContent"
        let indexCtx =
                constField "title" "Home" <>
                baseCtx

        getResourceBody
            >>= applyAsTemplate (listField "posts" (teaserField "teaser" "postContent" <> postCtx) (return posts) <> indexCtx)
            >>= loadAndApplyDefaultTemplate indexCtx
            >>= relativizeUrls

"Предмет" в этом случае - это то, что getResourceBody возвращает, то есть тело index.html, Это связывает $posts$ к списку сообщений. Игнорируя метаданные, мой index.html просто:

$for(posts)$
    $partial("templates/teaser.html")$
$endfor$

$teaser$ затем связан в template/teaser.html шаблон.

Другие вопросы по тегам