使用Jekyll我想:
将所有这些过滤器放在一起时遇到问题
{% assign posts = site.posts | reverse %}
{% for post in posts limit:3 %}
{% if post.categories contains 'featured' and post.path != page.path %}
{% include card.html post=post %}
{% endif %}
{% endfor %}
现在限制无法正常工作,因为内部if
会阻止渲染一些项目。
答案 0 :(得分:1)
在进入循环之前将0
分配给counter
变量。不要在循环上设置限制,而是在counter
上设置另一个条件,使其低于限制,并使用Liquid的counter
过滤器增加plus
你符合标准并输出卡片的时间。
{% assign posts = site.posts | reverse %}
{% assign counter = 0 %}
{% for post in posts %}
{% if counter < 3 and post.categories contains 'featured' and post.path != page.path %}
{% include card.html post=post %}
{% assign counter = counter | plus: 1 %}
{% endif %}
{% endfor %}
我将所有这些基于循环我自己使用。我的情况稍微复杂一点:我检查当前页面的任何共享标签。我将此作为下面的进一步示例。
{% assign counter = 0 %}
{% for post in site.posts %}
{% if counter < 4 %}
{% if post.url != page.url %}
{% assign isValid = false %}
{% for page_tag in page.tags %}
{% for post_tag in post.tags %}
{% if post_tag == page_tag %}
{% assign isValid = true %}
{% endif %}
{% endfor %}
{% endfor %}
{% if isValid %}
{% include article_card.html %}
{% assign counter = counter | plus: 1 %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
where
失败虽然Liquid has a where
filter,它只能进行精确的比较,所以你必须像这样重新发明轮子,以便在更复杂的条件下实现类似where
的场景。这确实会导致很多循环遍历site.posts
,但Jekyll作为预处理器意味着使用有效低效的即兴where
类型循环的惩罚只是编译时的问题,而不是运行时问题。即使如此,为了尽可能地降低这个成本,我选择将counter
条件作为Jekyll计算的第一个条件。