jekyll + liquid:按月份的帖子数量

时间:2015-01-26 02:52:24

标签: count jekyll liquid

我正在jekyll学习流动性,而且我很难按月收集帖子数量。看起来很容易计算每个标签或类别的帖子数量(因为有变量site.tags和site.categories),我没有遇到任何问题。以下是my live examplegithub提供了每个标记/类别的帖子计数源代码。为了按月统计帖子,我尝试使用像

这样的计数器
{% 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> &mdash; {{ post.date | date: "%a %e-%b-%Y" }}</time> 
    </li>
    {% endif %}
  {% endfor %}
</ul>
{% endfor %}

2 个答案:

答案 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> &mdash; {{ post2.date | date: "%a %e-%b-%Y"}}</time> 
    </li>
  {% endfor %}
</ul>   
 {% assign counter = 0 %}
  {% endif %}
{% endfor %}

应该有一种改进上述方法的方法,所以我现在不接受任何答案。从经验丰富的人那里看到更优雅的解决方案真是太棒了。