2013-09-07 25 views
6

Jekyll, chciałbym stronę główną do listy ostatnio wysłane pogrupowane według daty, tak jak poniżej:Jak grupować posty według daty na stronie głównej w Jekyll?

06 wrzesień 2013

  • Post 1
  • Post 2
  • Post 3

05 września 2013

  • Post 1
  • post 2

Zasadniczo, po prostu chcą wypluć nagłówek datę post w pętli wynosi od innej daty z jednego uprzednio przetworzonego. Próbowałem to zrobić, testując, czy następny wpis w pętli for odpowiada dacie ostatniego posta, i wyświetla nagłówek daty tylko wtedy, gdy tak nie jest. To właśnie mój Ciecz szablon wygląda tak:

--- 
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 %} 

Jeśli zamiast używać post.date | date: "%m-%d-%Y" I zamiast powiedzieć po prostu post.date to działa, a posty są zgrupowane razem, ale tylko wtedy, gdy słupki mają dokładnie tę samą datę i czas (nie tylko w tym samym dniu miesiąca). Dlatego dodam bardziej konkretny post.date | date: "%m-%d-%Y".

Wszelkie pomysły? Dziękuję bardzo za naszą pomoc !!

Odpowiedz

6

znaleźć odpowiedź poprzez modyfikację rozwiązania archiwa tutaj: http://www.mitsake.net/2012/04/archives-in-jekyll/

Oto kod, który działa:

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

Alternatywne rozwiązanie:

Bezpośrednio uchwycić datę w formacie, który chcesz do wyświetlenia na końcu.
(tu: %A, %B %d, %Y ->Monday, April 30, 2012)

Wtedy nie trzeba używać | date: że często:

{% 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 %} 

Wygenerowany 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

Te wcześniejsze rozwiązania są fantastycznym i eleganckim sposobem na obejście niedociągnięć poprzednich wersji Jekyll, ale na szczęście pod koniec 2016 roku, Jekyll added a group_by_exp fil ter, które mogą zrobić o wiele więcej czysto.

{% 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 %} 

Dokumentację można znaleźć na stronie Jekyll Templates page.

Powiązane problemy