Ich brauche wirklich Hilfe mit Jekyll. Ich bin verzweifelt versuchen, Seiten zu generieren, wo Beiträge nach Datum gruppiert sind.Jekyll - Gruppe Beiträge nach Datum
Was ich will, ist eine Homepage mit allen Beiträgen des aktuellen Monats und dann die Möglichkeit, jeden Monat zu durchsuchen. Also muss ich eine Indexseite erstellen und alle anderen monatlichen Seiten generieren.
Ich bin neu in Ruby und Jekyll, also erkunde ich wirklich. Meine Homepage arbeitet mit etwas hässlichem Code, aber meine monatlichen Seiten funktionieren nicht: Der Post-Inhalt wird nicht "kompiliert" und erscheint in Rohtextil.
Mein Generator Klasse sieht wie folgt aus:
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
Und meine Vorlage 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>
Der Ausgang ist dieses:
<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>
der Inhalt ist immer noch in Textil. Irgendeine Idee? Vielen Dank! Alexandre
Update:
die Lösung:
{{ post.content | textilize }}
funktioniert nicht, weil sie nicht berücksichtigt Werte in meiner post.textile Datei gesetzt dauert.
Lösung:
ich etwas gefunden, wenn ich einen Beitrag zwingen, in der Schleife zu machen, es macht den Job:
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
Hallo Vielen Dank für Ihre Antwort. Ich habe versucht, dies zu tun, aber es berücksichtigt keine Variablen in meiner Textildatei (im _post-Ordner). Das ist mein Problem ! –
Nur eine Lösung gefunden, Wenn ich eine Zwischen-Rendering des Beitrags mache, funktioniert es: 'def group_by_month (Beiträge, Website) Monate = [] posts_by_month = {} posts.reverse.each do | post |' * * post.render (site.layouts, Website.site_payload) ** 'key = Time.utc (post.date.year, post.date.month) wenn posts_by_month.has_key? (key) posts_by_month [key] << Post sonst posts_by_month [key] = [ Beitrag] Monate << Taste Ende Ende return [Monate, posts_by_month] end' –
@AlexandreAssouad, wird dieser Code klarer, wenn Sie in Ihrer Frage bearbeiten (unter einer Rubrik "** Lösung **"). – huon