在Jekyll,我希望我的主页列出按日期分组的最新帖子,如下所示:
2013年9月6日
2013年9月5日
基本上,我只想在循环中的帖子与之前处理的日期不同时吐出日期标题。我试图通过测试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"
。
有什么想法吗?非常感谢我们的帮助!
答案 0 :(得分:5)
通过修改档案解决方案找到答案: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 %}
答案 1 :(得分:2)
替代解决方案:
以最终要显示的格式直接捕捉日期
(此处:%A, %B %d, %Y
- &gt; 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>
答案 2 :(得分:2)
这些先前的解决方案是解决以前版本的Jekyll缺点的绝妙而优雅的方法,但幸运的是在2016年末,Jekyll added a 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 Templates page上找到文档。