Как я могу включить пост тизеры в мою установку?
Я следую официальным инструкциям на сайте 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
шаблон.