Как сгруппировать сообщения по дате на домашней странице в Jekyll?

в Jekyll я хотел бы, чтобы моя домашняя страница перечисляла самые последние сообщения, сгруппированные по дате, например:

6 сентября 2013

  • сообщение 1
  • сообщение 2
  • пост 3

5 сентября 2013

  • сообщение 1
  • сообщение 2

в основном, я просто хочу выплюнуть заголовок даты, когда сообщение в цикле от другой даты от ранее обработанной. Я пытался сделайте это, проверив, совпадает ли следующая запись в цикле for с датой последней записи, и чтобы отобразить заголовок даты, только если это не так. Вот как выглядит мой шаблон Liquid:

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

если вместо использования post.date | date: "%m-%d-%Y" Я вместо этого говорю просто post.date он работает, и сообщения группируются вместе, но только если сообщения имеют одинаковую дату и время (а не только один и тот же день месяца). Вот почему я добавляю более конкретные post.date | date: "%m-%d-%Y".

какие идеи? Большое спасибо за наш помогите!!

3 ответов


нашел ответ, изменив решение архивов здесь:http://www.mitsake.net/2012/04/archives-in-jekyll/

вот код, который работает:

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

альтернативное решение:

сразу записывать дату в формате, который вы хотите отобразить в конце.
(здесь: %A, %B %d, %Y -->Monday, April 30, 2012)

тогда вам не нужно использовать | date: часто:

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

сгенерированный 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>

эти предыдущие решения-фантастический и элегантный способ обойти недостатки предыдущих версий Jekyll, но, к счастью, в конце 2016 года,Джекил добавил group_by_exp фильтр, который может сделать это намного более чисто.

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

документацию можно найти на страница шаблонов Jekyll.