2012-03-30 4 views
1

J'ai vraiment besoin d'aide avec Jekyll. J'essaie désespérément de générer des pages où les messages sont regroupés par date.Jekyll - les messages du groupe par date

Ce que je veux est d'avoir une page d'accueil avec tous les messages du mois en cours et ensuite la possibilité de parcourir tous les mois. Je dois donc générer une page d'index et générer toutes les autres pages mensuelles. Je suis nouveau à Ruby et Jekyll donc je suis vraiment en train d'explorer. Ma page d'accueil fonctionne avec du code moche mais mes pages mensuelles ne fonctionnent pas: le contenu de la publication n'est pas "compilé" et apparaît dans le textile brut.

Ma classe de générateur ressemble à ceci:

class MonthlyGenerator < Generator 
safe true 

def group_by_month(posts) 
    months = [] 
    posts_by_month = {} 
    posts.reverse.each do |post| 
    key = Time.utc(post.date.year, post.date.month) 
    if posts_by_month.has_key?(key) 
     posts_by_month[key] << post 
    else 
     posts_by_month[key] = [post] 
     months << key 
    end 
    end 
    return [months,posts_by_month] 
end 

def generate(site) 
    data = group_by_month(site.posts) 
    months = data[0] 
    posts_by_month = data[1] 
    months.each_with_index do |month, index| 
    if index >= 0 && index < months.length 
     nextMonth = months[index+1] 
    else 
     nextMonth = false 
    end 
    if index > 0 && index <= months.length 
     previousMonth = months[index-1] 
    else 
     previousMonth = false 
    end 
    posts = posts_by_month[month] 

    dir = "/"+month.year.to_s+"-"+month.mon.to_s 
    write_monthly_posts(site, dir, month, posts, nextMonth, previousMonth) 
    end 
end 

def write_monthly_posts(site, dir, month, posts, nextMonth, previousMonth) 
    monthlypage = MonthlyPage.new(site, dir, month, posts, nextMonth, previousMonth) 
    monthlypage.render(site.layouts, site.site_payload) 
    monthlypage.write(site.dest) 
    site.pages << monthlypage 
end 
end 

Et mon modèle monthly.html:

<div class="span3"> 
    <h1>{{ page.month }}</h1> 
</div> 
<div class="span9"> 
    {% for post in page.posts %} 
     <a href="{{ post.url }}">{{ post.title | truncate:65 }}</a> 
     {{ post.content }} 
    {% endfor %} 
</div> 

La sortie est celle-ci:

<div class="span3"> 
    <h1>Sat Nov 01 00:00:00 UTC 2008</h1> 
</div> 
<div class="span9"> 

     <a href="/cat1/2008/11/19/test2.html">Test2</a> 
     h1. test 

p(meta). 1nounmjlkjlktest2 

2008 is a leap year. That means that three hundred and sixty six days 


<iframe class="video" src="http://player.vimeo.com/video/?title=0&amp;byline=0&amp;portrait=0" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen> 
</iframe> 

</div> 

le contenu est encore en textile. Une idée? Merci beaucoup! Alexandre


mise à jour:

la solution:

{{ post.content | textilize }} 

ne fonctionne pas parce qu'il ne prend pas en compte les valeurs définies dans mon fichier post.textile.


Solution:

J'ai trouvé quelque chose, si je force un poste à rendre dans la boucle, il fait le travail:

def group_by_month(posts, site) 
    months = [] posts_by_month = {} 
    posts.reverse.each do |post| 
     post.render(site.layouts, site.site_payload) 
     key = Time.utc(post.date.year, post.date.month) 
     if posts_by_month.has_key?(key) 
      posts_by_month[key] << post 
     else 
      posts_by_month[key] = [post] 
      months << key 
     end 
    end 
    return [months,posts_by_month] 
end 

Répondre

1

Trouvé Solution:

J'ai trouvé quelque chose, si je force un poste à rendre dans la boucle, il fait le travail:

def group_by_month(posts, site) 
    months = [] posts_by_month = {} 
    posts.reverse.each do |post| 
     **post.render(site.layouts, site.site_payload)** 
     key = Time.utc(post.date.year, post.date.month) 
     if posts_by_month.has_key?(key) 
      posts_by_month[key] << post 
     else 
      posts_by_month[key] = [post] 
      months << key 
     end 
    end 
    return [months,posts_by_month] 
end 
0

Le contenu est encore en textile parce que monthly.html est un fichier HTML, et jekyll n'exécute aucun traitement de texte sur les fichiers HTML (autre que Liquid, qui fait juste une substitution avec le texte en page.content, pas de conversion). Cependant, jekyll a quelques built-in Liquid filters pour aider avec ceci, spécifiquement textilize pour convertir Textile en HTML. Vous l'utiliser comme ceci:

{{ post.content | textilize }} 
+0

Bonjour , Merci beaucoup pour votre réponse, j'ai essayé de le faire mais cela ne tient pas compte des variables dans mon fichier textile (dans le dossier _post). C'est mon problème ! –

+0

Je viens de trouver une solution, Si je fais un rendu intermédiaire du message, cela fonctionne: 'def group_by_month (messages, site) mois = [] posts_by_month = {} posts.reverse.each faire | post |' * * post.render (site.layouts, site.site_payload) ** 'key = Time.utc (post.date.year, post.date.month) si posts_by_month.has_key? (clé) posts_by_month [key] << afficher autre posts_by_month [key] = [ Annonce] mois << clé fin fin retour [mois, posts_by_month] end' –

+0

@AlexandreAssouad, ce code sera plus clair si vous modifiez dans votre question (sous une rubrique "Solution ** **"). – huon