注意:
我无法让sorted_for
插件在我的机器上工作,所以我用常规测试我的解决方案for
。
步骤1
由于您正在过滤掉一些页面而无法使用forloop.index
,因此您需要自己计算循环数,方法是使用assign
.
以下代码将仅使用正确的循环迭代器列出您的页面(仅计算实际列出的页面):
{% assign loopindex = 0 %}
{% for page in site.pages %}
{% if page.type == 'project' %}
{% assign loopindex = loopindex | plus: 1 %}
<div class="span3">{{ loopindex }} {{ page.title }}</div>
{% endif %}
{% endfor %}
第2步
您需要在<div class="row">
每第一行和</div>
每第四行显示。
要查找第一行和第四行,您可以使用modulo
:
{% assign loopindex = 0 %}
{% for page in site.pages %}
{% if page.type == 'project' %}
{% assign loopindex = loopindex | plus: 1 %}
{% assign rowfinder = loopindex | modulo: 4 %}
<div class="span3">{{ loopindex }} {{ rowfinder }} {{ page.title }}</div>
{% endif %}
{% endfor %}
rowfinder
将始终重复序列1, 2, 3, 0。
第 3 步:
所以你显示<div class="row">
when rowfinder
is1
和</div>
when rowfinder
is 0
:
{% assign loopindex = 0 %}
{% for page in site.pages %}
{% if page.type == 'project' %}
{% assign loopindex = loopindex | plus: 1 %}
{% assign rowfinder = loopindex | modulo: 4 %}
{% if rowfinder == 1 %}
<div class="row">
<div class="span3">{{ page.title }}</div>
{% elsif rowfinder == 0 %}
<div class="span3">{{ page.title }}</div>
</div>
{% else %}
<div class="span3">{{ page.title }}</div>
{% endif %}
{% endif %}
{% endfor %}
第4步:
现在只剩下一件小事:当页数不是 4 的倍数时,</div>
最后有一个缺失。
当页数是rowfinder
4 的倍数时,最后一个值为0
。
所以我们只需要显示</div>
当 的值rowfinder
不是0
.
因此,只需将其放在 for 循环之后:
{% if rowfinder != 0 %}
</div>
{% endif %}
……就是这样!