Передать массив включаемому для повторения цикла

#jekyll #liquid

#jekyll #жидкость

Вопрос:

У меня есть включение, в котором может быть > 1 кнопки в зависимости от того, что передается.

В настоящее время у меня есть следующее во включаемом:

 {% if include.buttons %}
   {% for button in include.buttons %}
      <a class="{{ button.classes }}" href="{{ button.url }}">{{ button.title }}</a>
   {% endfor %}
{% endif %}
  

Затем я пытаюсь передать следующие данные:

 {% assign buttons = '[{ "title": "button 1", "url": "https://#", "classes": "btn btn-transparent" }, { "title": "button 2", "url": "https://#", "classes": "btn btn-primary" }]' %}
{% include header.html
   buttons=buttons
%}
  

Чего я не могу понять, так это как правильно передать данные во включаемое, чтобы я мог выполнять цикл по ним.

Ответ №1:

Проблема заключается в присвоении данных в виде массива. В liquid вы не можете напрямую инициализировать массивы. Обходной путь — поиграть с разделением.

Однако, используя jekyll, вы можете предоставлять массивы через файлы данных. Просто поместите ваши кнопки в файл, скажем _databuttons.yml с:

 postXX:
  - button1:
    - title: "button 1"
    - url: "https://#"
    - classes: "btn btn-transparent"
  - button2:
    - title: "button 2"
    - url: "https://#"
    - classes: "btn btn-primary"
  

Теперь вы могли бы поместить ссылку в yaml-заголовок вашего сообщения / страницы, например:

 ---
your other yaml options....
buttons: postXX
---
  

Наконец, назначьте кнопки и включите их, как вы делали в своем коде.

 {% assign buttons = site.data.buttons[page.buttons] %}
{% include header.html
   buttons=buttons
%}
  

Ответ №2:

С помощью Liquid вы не можете создать массив с литеральным выражением типа {% assign myArray = ["one","two","three"] %} .

Вы можете только :

  • создать пустой : {% assign emptyArray = "" | split: "" %}
  • создать массив из строки : {% assign myArray = "one two three" | split: " " %}

Затем вы можете манипулировать своим массивом :

Таким образом, ваш массив может быть получен только в результате манипулирования жидким массивом или некоторыми данными, содержащимися в конфигурации, файле данных или на первой странице.