2013-09-07 14 views
6

In Jekyll, würde ich meine Homepage wie die neuesten Beiträge von Datum gruppiert aufzulisten, etwa so:Wie gruppieren Beiträge nach Datum auf der Startseite in Jekyll?

6. September 2013

  • Beitrag 1
  • Beitrag 2
  • Post 3

5. September 2013

  • Beitrag 1
  • Beitrag 2

Grundsätzlich mag ich nur ein Datum Überschrift ausspucken, wenn ein Eintrag in der Schleife von einem anderen Zeitpunkt von der zuvor verarbeiteten ist. Ich habe versucht, dies zu tun, indem Sie testen, ob der nächste Post in der for-Schleife mit dem Datum des letzten Posts übereinstimmt, und einen Datumskopf nur anzuzeigen, wenn dies nicht der Fall ist. Dies ist, was meine Flüssiges Vorlage wie folgt aussieht:

--- 
layout: default 
title: Home Page 
--- 

{% assign thedate = '' %} 

{% for post in site.posts %} 

    {% if thedate != post.date | date: "%m-%d-%Y" %} 
     <h2>{{ post.date | date: "%A, %B %e, %Y" }}</h2> 
    {% endif %} 

    {% assign thedate = post.date | date: "%m-%d-%Y" %} 

    <h3 class="headline"><a href="{{ post.url }}">{{ post.title }}</a></h3> 
    {{ post.content }} 
    <hr> 

{% endfor %} 

Wenn stattdessen post.date | date: "%m-%d-%Y" verwenden stattdessen ich einfach post.date sagen, es funktioniert, und Beiträge werden gruppiert, aber nur, wenn die Beiträge haben die exakt gleiche Datum und Zeit (nicht nur am selben Tag des Monats). Deshalb füge ich den spezifischeren post.date | date: "%m-%d-%Y" hinzu.

Irgendwelche Ideen? Vielen Dank für unsere Hilfe !!

Antwort

6

die Antwort gefunden, indem Sie die Archiv-Lösung hier ändern: http://www.mitsake.net/2012/04/archives-in-jekyll/

Hier ist der Code, das funktioniert:

layout: default 
title: Home Page 
--- 

{% for post in site.posts %} 

    {% capture day %}{{ post.date | date: '%m%d%Y' }}{% endcapture %} 
    {% capture nday %}{{ post.next.date | date: '%m%d%Y' }}{% endcapture %} 

    {% if day != nday %} 
     <h5 class="date">{{ post.date | date: "%A, %B %e, %Y" }}</h5> 
    {% endif %} 
    {{ post.content }} 
    <hr> 

{% endfor %} 
3

Alternative Lösung:

Direkt das Datum im Format erfassen, die Sie wollen am Ende anzeigen.
(hier: %A, %B %d, %Y ->Monday, April 30, 2012)

Dann brauchen Sie nicht | date: zu verwenden, die oft:

{% for post in site.posts %} 
    {% capture currentdate %}{{post.date | date: "%A, %B %d, %Y"}}{% endcapture %} 
    {% if currentdate != thedate %} 
    <h2>{{ currentdate }}</h2> 
    {% capture thedate %}{{currentdate}}{% endcapture %} 
    {% endif %} 
    <h3><a href="{{ post.url }}">{{ post.title }}</a></h3> 
{% endfor %} 

Der erzeugte HTML:

<h2>Monday, April 30, 2012</h2> 
<h3><a href="/2012/04/30/foo/">Foo</a></h3> 
<h2>Friday, March 09, 2012</h2> 
<h3><a href="/2012/03/09/bar/">Bar</a></h3> 
<h3><a href="/2012/03/09/baz/">Baz</a></h3> 
1

Diese bisherigen Lösungen sind eine fantastische und elegante Möglichkeit, um die Mängel früherer Versionen von Jekyll zu umgehen, aber zum Glück Ende 2016, Jekyll added a group_by_exp fil Das kann das viel sauberer machen.

{% assign postsByDay = 
site.posts | group_by_exp:"post", "post.date | date: '%A, %B %e, %Y'" %} 

{% for day in postsByDay %} 
    <h1>{{ day.name }}</h1> 
    <ul> 
     {% for post in day.items %} 
     <li><a href="{{ post.url }}">{{ post.title }}</a></li> 
     {% endfor %} 
    </ul> 
{% endfor %} 

Dokumentation kann auf der Jekyll Templates page gefunden werden.

Verwandte Themen