2013-04-07 26 views
6

Aşağıdaki kodu, site üzerindeki en son üç yayına bağlantı üretmek yerine, yayınların gövdesini geleneksel bir blogda olduğu gibi tamamen yeniden üretecek şekilde değiştirmek istiyorum. Aşağıda neler olup bittiğini anlamakta biraz zorlanıyorum ve gerekli değişikliklerin ne olacağı.Hakyll örnek sitesinin değiştirilmesi

match "index.html" $ do 
    route idRoute 
    compile $ do 
     let indexCtx = field "posts" $ \_ -> 
          postList $ fmap (take 3) . recentFirst 

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

cevap

3

Bu, tamamen önemsiz değildir. İlk adım snapshots'u tanıtıyor.

Öğreticide açıklandığı gibi, bu, ilk HTML'ye uygulanmış şablonlara sahip olan olmadan dizininize blog yazılarını dahil etmenizi sağlar.

match "posts/*" $ do 
    route $ setExtension "html" 
    compile $ pandocCompiler 
     >>= loadAndApplyTemplate "templates/post.html" postCtx 
     >>= saveSnapshot "content" 
     >>= loadAndApplyTemplate "templates/default.html" postCtx 
     >>= relativizeUrls 

Şimdi, dizin sayfasında mesajları görüntülemek için, sen mesajların tamamını $body$ kullanmak mümkün olacak: Yani böyle bir şey çıkacak.

<div> 
    <a href="$url$"><h2>$title$</h2></a> 
    $body$ 
</div> 
+1

Bunu yapmak, her gönderinin içeriğine ek olarak tüm üstbilgileri çoğaltmak gibi görünüyor. – pgay

1

Bu yazı biraz eski ama burada çözülecek gibi görünmüyor beri bu konuda nasıl gittiğini biliyorum: Bunu yapmak için, sadece böyle bir şey haline templates/post-item.html güncellemek gerekecek. loadAllSnapshots ile index.html yük için

match "posts/*" $ do 
    route $ setExtension "html" 
    compile $ pandocCompiler 
    >>= loadAndApplyTemplate "templates/post.html" postCtx 
    >>= saveSnapshot "content" 
    >>= loadAndApplyTemplate "templates/default.html" postCtx 
    >>= relativizeUrls 

Sonra tüm post anlık: @jaspervdj tarafından açıklanan

İlk anlık kaydetmek

match "index.html" $ do 
    route idRoute 
    compile $ do 
    posts <- recentFirst =<< loadAllSnapshots "posts/*" "content" 
    let indexCtx = listField "posts" postCtx (return posts) `mappend` 
        defaultContext 

anlık çekildiği yana default şablonu uygulamadan önce, $for(posts)$ içinde $body$ değeri, varsayılan şablon uygulanmadan yalnızca her bir yayın şablonunun içeriği olacaktır.