Передайте массив для включения - PullRequest
0 голосов
/ 15 марта 2019

У меня есть включение, которое может иметь> 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
%}

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

Ответы [ 2 ]

1 голос
/ 15 марта 2019

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

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

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

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

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

1 голос
/ 15 марта 2019

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

Однако, используя jekyll, вы можете предоставлять массивы через файлы данных . Просто поместите свои кнопки в файл, скажем _data\buttons.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
%}
...