我正在研究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...
等每个计数
答案 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 %}