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&byline=0&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
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 ! –
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' –
@AlexandreAssouad, ce code sera plus clair si vous modifiez dans votre question (sous une rubrique "Solution ** **"). – huon