杰奇自动处理行(Jekyll automatically processing rows)

2019-10-19 04:34发布

我想从筛选出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>
...

如此反复,直到行用完。 如何访问我需要这样做的信息? 不幸的是,对于循环迭代数量将是错误的,因为它也将通过非项目页面打勾。 有没有办法实现这个干净的方法吗?

Answer 1:

注意:
我不能让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">rowfinder1 ,和</div>rowfinder0

{% 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 %}

......这就是它!



文章来源: Jekyll automatically processing rows