首页 > 解决方案 > 将数组传递给包含以循环

问题描述

根据传入的内容,我有一个包含 >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
%}

我无法解决的是如何正确地将数据传递给包含,以便我可以遍历它。

标签: jekyllliquid

解决方案


问题是将数据分配为数组。在液体中,您不能直接初始化数组。一种解决方法是使用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-header 中添加一个引用,例如:

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

最后,像在代码中那样分配按钮并包含它们。

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

推荐阅读