Jekyll:对集合中的项目进行排序,同时在集合上循环



我想遍历Jekyll站点中的所有集合,并在其中对该集合中的所有页面进行排序和列出。

基于这个stackoverflow答案,我可以循环浏览所有集合和项目:

{% for collection in site.collections %}
<h2>Items from {{ collection.label }}</h2>
<ul>
{% assign pages = site[collection.label] %}
{% for item in pages %}
<li><a href="{{ item.url }}">{{ item.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}

对于一个特定的集合,我也可以从前面的内容中对更新字段进行排序:

{% assign sorted = site.programming | sort: 'update' %}

但如果我试图将其应用于第一个例子,它失败了:

{% assign pages = site[collection.label] | sort: 'update' %}

这给出了一个通常无用的错误:

Liquid Exception: Liquid error (line 30): comparison of Array with Array failed in index.md
Error: Liquid error (line 30): comparison of Array with Array failed
Error: Run jekyll build --trace for more information.

我猜site[collection.label]在某种程度上返回了与site.programming不同的东西,但我不确定是什么,也不知道如何解决这个问题。

编辑:我尝试使用collection.docs而不是site[collection.label],但得到了相同的错误。

这个错误的原因不是collection.docssite[collection.label]之间的差异。相反,在其中一个集合中,有一个项目的标题不包含update字段。因此,它无法按此字段排序,因为并非所有项目都有。同样,如果类型在所有情况下都不可比较,则会出现相同的错误。在这种情况下,它们都应该是日期;如果其中一个不是有效的日期格式,则失败。

我仍然认为这是一个非常模糊的错误信息。

最新更新