Jekyll前面的物质输出计数

时间:2017-06-05 06:24:39

标签: ruby jekyll

我正在研究jekyll主题设计,我有.yml文件存储数据(文件名:games.yml),数据如下

---
- name: NFS
  year: 2015
  id: NFS15
  link: http://www.ecample.com/
  date: August 3-4, 2017
  categories: Racing

etc

我正在尝试在侧栏中输出每个类别中的计数。 e.g:

Racing (3)
Shooter (6)
Sports (5)
etc

我怎样才能做到这一点?

我的HTML输出代码:

      <a href="javascript:;" class="categories-list-item" cate="All">
        All<span class="my-badge"> {{site.data.games | size}}</span>
      </a>
      {% for cat in site.data.games %}
        <a href="javascript:;" class="categories-list-item" cate="{{ cat.categories}}">
          {{ cat.categories }} <span class="my-badge">{{ cat.categories | size }}</span>
        </a>
      {% endfor %}

现在我得到整个类别列表的结果,例如:

Racing
Racing
Racing
Shooter 
Shooter 
Shooter... 

等每个计数

2 个答案:

答案 0 :(得分:1)

创建一个包含每个类别的数组,然后对所有项目进行for循环,以计算当前项目类别在每个项目中出现的次数,将该信息保存到计数器中并在结尾显示:

{% assign cats = ''|split:"" %}
{% for game in site.data.games %}
{% unless cats contains game.categories %}
{% assign cats = cats | push: game.categories %}
{% endunless %}
{% endfor %}

{% for cat in cats %}
{% assign counter = 0 %}
{% for item in site.data.games %}
{% if cat == item.categories %}
{% assign counter = counter | plus: 1%}
{%endif%}
{% endfor %}

<a href="javascript:;" class="categories-list-item" cate="{{ cat }}">
    {{ cat }} <span class="my-badge">{{ counter }}</span>
</a>
{% endfor %}

或者使用 group_by

按游戏类别对它们进行分组
{% assign games = site.data.games | group_by:"categories" %}
{% for game in games %}
<a href="javascript:;" class="categories-list-item" cate="{{ cat.categories}}">
    {{ game.name }} <span class="my-badge">{{ game.size }}</span>
</a>
{% endfor %}

第一个版本适用于以前版本的Jekyll,它没有 group_by

答案 1 :(得分:1)

您可以使用Jekyll的 group_by_exp 原生过滤器轻松实现此目标:

{% assign games = site.data.games | group_by_exp: "game", "game.categories" %}
{% for category in games %}
  <a href="javascript:;" class="categories-list-item" cate="{{ category.name }}">
    {{ category.name }} <span class="my-badge">{{ category.size }}</span>
  </a>
{% endfor %}