我正在jekyll学习流动性,而且我很难按月收集帖子数量。看起来很容易计算每个标签或类别的帖子数量(因为有变量site.tags和site.categories),我没有遇到任何问题。以下是my live example,github提供了每个标记/类别的帖子计数源代码。为了按月统计帖子,我尝试使用像
这样的计数器{% capture counter %}{{ counter | plus:1 }} {% endcapture %} {% endif %}
但它的各种用途并没有给我预期的数量,我现在怀疑有更好的方法。问题是我如何修改下面的代码,以便显示当月(给定年份)而不是每个类别的帖子数量?
{% capture site_cats %}{% for cat in site.categories %}{{ cat | first }}
{%unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %}
{% assign sortedcats = site_cats | split:',' | sort %}
{% for category in sortedcats %}
{{category }}{{site.categories[category] | size }}
<ul>
{% for post in site.categories[category] %}
{% if post.url %}
<li><a href="{{ post.url }}">{{ post.title }}</a>
<time> — {{ post.date | date: "%a %e-%b-%Y" }}</time>
</li>
{% endif %}
{% endfor %}
</ul>
{% endfor %}
答案 0 :(得分:5)
从the source code of my blog复制,略有修改:
{% assign counter = 0 %}
{% for post in site.posts %}
{% assign thisyear = post.date | date: "%B %Y" %}
{% assign prevyear = post.previous.date | date: "%B %Y" %}
{% assign counter = counter | plus: 1 %}
{% if thisyear != prevyear %}
<li><a href="/archive/#{{ post.date | date:"%B %Y" }}">{{ thisyear }} ({{ counter }})</a></li>
{% assign counter = 0 %}
{% endif %}
{% endfor %}
生成的HTML:
<li><a href="/archive/#January 2015">January 2015 (1)</a></li>
<li><a href="/archive/#November 2014">November 2014 (2)</a></li>
<li><a href="/archive/#October 2014">October 2014 (1)</a></li>
<li><a href="/archive/#September 2014">September 2014 (1)</a></li>
替代:
要按年而不是按月分组,请在出现的所有三个地方将%B %Y
更改为%Y
。
(%B
是完整的月份名称,%Y
是年份,请参阅documentation)
使用%Y
,生成的HTML将如下所示:
<li><a href="/archive/#2015">2015 (1)</a></li>
<li><a href="/archive/#2014">2014 (8)</a></li>
<li><a href="/archive/#2013">2013 (11)</a></li>
<li><a href="/archive/#2012">2012 (5)</a></li>
(这是我在博客上使用的)
答案 1 :(得分:0)
单独的计数器只是答案的一半。与按标签或类别分组的帖子一样,需要在按月/年分组的帖子列表中包含计数器。我终于找到了似乎有效的东西
{% for post in site.posts %}
{% assign thisyear = post.date | date: "%B %Y" %}
{% assign prevyear = post.previous.date | date: "%B %Y" %}
{% assign counter = counter | plus: 1 %}
{% if thisyear != prevyear %}
<h2 class="archive"><a>{{ thisyear }}</a> <i class="fa fa-cube"></i>
{{counter }}</h2>
<ul>
{% assign fli = forloop.index | minus: counter %}
{% for post2 in site.posts limit: counter offset: fli %}
<li><a href="{{ post2.url }}">{{ post2.title }}</a>
<time> — {{ post2.date | date: "%a %e-%b-%Y"}}</time>
</li>
{% endfor %}
</ul>
{% assign counter = 0 %}
{% endif %}
{% endfor %}
应该有一种改进上述方法的方法,所以我现在不接受任何答案。从经验丰富的人那里看到更优雅的解决方案真是太棒了。