Jekyll / Liquid: передача массива в include и циклы - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь перебрать массив, который передается в 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 голосов
/ 18 апреля 2019

Я думаю, что вам нужен вложенный цикл 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/

...