#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: " " %}
Затем вы можете манипулировать своим массивом :
- добавить элемент в массив:
push
илиshift
(фильтры, специфичные для jekyll) - удалить элемент из массива:
pop
илиunshift
(фильтры, специфичные для jekyll) - объединить два массива с
concat
- и так далее …
Таким образом, ваш массив может быть получен только в результате манипулирования жидким массивом или некоторыми данными, содержащимися в конфигурации, файле данных или на первой странице.