在 liquid 任务中连接两个集合

Conctenating two collections in a liquid assignment

基于this tutorial,我搭建了一个多语言的Jekyll站点。在每个页面中,以下代码链接到同一页面的不同语言版本:

    {% assign pages=site.pages | where:"id", page.id | sort: 'path' %}
    {% for p in pages %}
    <a href="{{ p.url | prepend: site.baseurl }}" class="{{ p.lang }}"><img src="{{ site.baseurl }}/images/{{ p.lang }}.png" alt="This page in {{ p.lang }}"/></a>
    {% endfor %}

这很有效,但我想在 "site.pages" 之外的属于其他集合的页面中执行相同的操作。例如,我有一个名为 "site.TOPICS" 的集合。我想用类似的东西替换第一行:

    {% assign pages=site.pages + site.TOPICS | where:"id", page.id | sort: 'path' %}

或:

    {% assign pages=site.EVERYTHING | where:"id", page.id | sort: 'path' %}

但这不起作用。

有没有办法连接两个集合?或者,无论类型如何,都可以访问站点中的所有对象?

现在(Jekyll 3.1.x我认为你做不到。

我发现:https://github.com/Shopify/liquid/issues/427

这似乎表明它即将到来 - 这个问题看起来已在 Liquid 中解决,但 Jekyll 使用的是更高版本的 liquid。

我还发现了这个:https://github.com/mpc-hc/mpc-hc.org/commit/624a4bf63710ce00d98c80f8b3655a71c0468747#diff-23a9de36055c1aa13a62d73b9c318ebd

parker 说这是一个潜在的 4.x 功能。

看起来如果您有多个集合,您可以使用 site.documents 来执行此操作,我做了一些测试,虽然听起来 site.documents 是站点中的所有文档,但它看起来它真的是集合中的所有文档。

有一个 push 过滤器,也许您可​​以使用它来将一个数组推入另一个数组,但我不认为它真的可以将 2 个数组加在一起。

与此同时,我认为只需复制您的代码,一个用于页面,一个用于集合就可以了。如果我理解正确的话,你的 id 只有在匹配时才会被发现,这样一个人会找到另一个人找不到的东西。