我想从筛选出site.pages
与给定的YAML frontmatter类型的所有页面'project'
。
要做到这一点,我已经做到了这一点:
{% sorted_for page in site.pages sort_by:title %}
{% if page.type == 'project' %}
do something
{% endif %}
{% endfor %}
本品采用sorted_for插件。 我想现在要做的,不过是在四个CSS行安排这些。
<div class="row">
<div class="span3">{{ page1.title }}</div>
<div class="span3">{{ page2.title }}</div>
<div class="span3">{{ page3.title }}</div>
<div class="span3">{{ pagen.title }}</div>
</div>
...
如此反复,直到行用完。 如何访问我需要这样做的信息? 不幸的是,对于循环迭代数量将是错误的,因为它也将通过非项目页面打勾。 有没有办法实现这个干净的方法吗?
注意:
我不能让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">
当rowfinder
是1
,和</div>
当rowfinder
是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的倍数,有一个</div>
缺少结尾。
当的页数是 4的倍数,的最后一个值rowfinder
将是0
。
所以我们只需要显示</div>
时的值rowfinder
是别的什么,只是0
。
所以只是把这个后的for循环:
{% if rowfinder != 0 %}
</div>
{% endif %}
......这就是它!