gpt4 book ai didi

jekyll - 在 Liquid 中过滤或分组集合

转载 作者:行者123 更新时间:2023-12-01 15:49:38 25 4
gpt4 key购买 nike

对于一个简单的个人 Jekyll 博客,我想将我的 site.posts 分组通过 post 上的属性, lang(语言)。这是“en”、“nl”或 nil。

然后我想呈现两个帖子列表。目前我有:

<section lang="nl">
<h2>Nederlandse Artikelen</h2>
<ul class="posts">
{% for post in site.posts limit:50 %}
{% if post.lang == "nl" %}
{% include li_for_post_with_date.yml %}
{% endif %}
{% endfor %}
</ul>
<a href="archief.html">Archief »</a>
</section>
<section lang="en">
<h2>English Articles</h2>
<ul class="posts">
{% for post in site.posts limit:50 %}
{% if post.lang == nil or post.lang == "en" %}
<li><span>{{ post.date | date_to_string }}</span> &raquo; <a href="{{ BASE_PATH }}{{ post.url }}">{{ post.title }}</a></li>
{% endif %}
{% endfor %}
</ul>

这有两个问题:

  1. 最烦人;在最后 50 篇文章中,有 47 篇 lang=en 和 3 篇 l​​ang=nl,我现在得到一个倾斜的列表。我想要 25 个 lang=en 和 25 个 lang=nl 条目。
  2. 循环遍历了两次,这让我觉得很无能。

有没有办法在 Liquid 中分配或准备集合?这样我就可以遍历 site.posts一次并准备一个嵌套集合,如 site.grouped_posts[en] .

还是别的把戏?

解决方案

作为Tom Clarkson指出,保持柜台是正确的方向。然而,递增计数器只出现在最近的 Liquid 版本中,在 Github 上运行的版本(我的 liquid 是在这里编译的)有 2.2.2,无法递增计数器。 Toms 解决方案本身也不起作用,因为 Liquid 将变量变为 counter成一个字符串,无法与 < 进行比较.

我创建了一个 hack,方法是附加一个字符串并计算字符数。

{% assign counter = '.' %}
{% for post in site.posts %}
{% if counter.size <= 25 and post.lang == "nl" %}
{% capture counter %}{{ counter | append:'.' }}{% endcapture %}
{% include li_for_post_with_date.yml %}
{% endif %}
{% endfor %}

如前所述,丑陋,所以如果有更清洁的解决方案,请添加一个解决方案!

最佳答案

不幸的是,Liquid 的过滤器在 for 循环中不起作用。但是,它们确实适用于变量赋值。

{% assign posts_by_lang = site.posts | group_by: "lang" %}
{% for lang in posts_by_lang %}
{{ lang.name }}
{% for post in lang.items limit: 25 %}
{{ post.title }}
{% endfor %}
{% endfor %}

nameitems 属性由 group_by 生成,其余一切照常。

关于jekyll - 在 Liquid 中过滤或分组集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13568052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com