Jekyll / Liquid:将数组传递到包含和循环中

时间:2019-03-19 21:42:08

标签: yaml jekyll liquid

我正在尝试遍历作为变量传递到include中的数组,然后检查该变量是否与某些YAML匹配-如果它确实要打印结果。我可以使用下面的代码手动执行此操作,但是我需要一个在较大数组下可以使用的解决方案。

首先,我从页面浏览以下信息:

<!--- Pass these variables into include.html --->

{% assign var_array = "D" %}
{% assign data = "object" %}
{% include include.html %}

我想消除所有 eslif ,并替换为将遍历整个数组的内容。

<!--- include.html --->

{% assign data = site.data.sheet.[data].last.items %}
{% assign sorted = var_array | split:"," %}

{% for item in data %}

    {% if item.foo == sorted[0] %}
    <p>{{ item.foo }}</p>

    {% elsif item.foo == sorted[1] %}
    <p>{{ item.foo }}</p>

    {% elsif item.foo == sorted[2] %}
    <p>{{ item.foo }}</p>

    {% elsif item.foo == sorted[3] %}
    <p>{{ item.foo }}</p>
    {% endif %}

{% endfor %}

以下是YAML数据:

<!--- sheet.yaml --->

object:
- items:
  - foo: 'A'
  - bar: 'text'
- items:
  - foo: 'B'
    bar: 'text'  
- items:
  - foo: 'C'
    bar: 'text'  
- items:
  - foo: 'D'
    bar: 'text'      

这是所需的输出:

<!-- Desired Output --->

<p>D</p>

1 个答案:

答案 0 :(得分:0)

我认为您需要的是一个嵌套的for循环。

这应该可以解决问题:

{% for item in data %}
    {% for s in sorted %}
        {% if item.foo == s %}
            <p>{{ item.foo }}</p>
        {% endif %}            
    {% endfor %}
{% endfor %}

如果要循环的两个数组很大,则会产生许多迭代。但是,在Jekyll环境中,只有在开发项目的特定部分时才能执行此操作。

顺便说一句:在您的代码中,您没有将任何变量传递给包含的文件。 有关如何正确执行此操作,请查看Jekyll文档:https://jekyllrb.com/docs/includes/