2012-03-30 14 views
1

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&amp;byline=0&amp;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 

Antwort

1

gefunden 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 
0

Der Inhalt ist nach wie vor in Textile weil monthly.html ist eine HTML-Datei, und jekyll läuft kein Textverarbeitungsprogramm über HTML-Dateien (außer Liquid, die nur eine Ersetzung mit dem Text in page.content, keine Konvertierung). Jekyll hat jedoch einige built-in Liquid filters, um mit diesem zu helfen, speziell textilize Textile in HTML zu konvertieren. Sie würde es so verwenden:

{{ post.content | textilize }} 
+0

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 ! –

+0

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' –

+0

@AlexandreAssouad, wird dieser Code klarer, wenn Sie in Ihrer Frage bearbeiten (unter einer Rubrik "** Lösung **"). – huon

Verwandte Themen