【问题标题】:If then YAML loop structure in _data file for Jekyll如果是 Jekyll 的 _data 文件中的 YAML 循环结构
【发布时间】:2017-03-15 17:59:16
【问题描述】:

我很难在 Jekyll 中使用 YAML 进行循环所需的精确缩进和连字符。

对于上下文:我正在使用 Fancybox,它可以包含隐藏的图像,一旦您弹出缩略图,您就可以滚动浏览这些图像。并非我正在构建的画廊中的所有图像都有隐藏的图像,但有些有,这需要在每个

中插入一个 HTML 块

所以基本上我正在尝试在 /_data 中构建一个名为 gallery.yml 的页面,其中包含所有必要的项目(缩略图 URL、标题等),以便循环插入 Fancybox HTML(这是在/_includes 内的一个页面中)。

在我的案例中,我无法找到关于如何构建 YAML 的确切答案。我不断收到映射值和解析错误。我会尽量简化结构:

gallery.yml:

#gallery
- name: Saturn
  category: Planets
  thumb_url: saturn-thumb.jpg
  main_url: saturn.jpg

- name: Neptune
  category: Planets
  thumb_url: neptune-thumb.jpg
  main_url: neptune.jpg
    - set_two:
        category: Planets
        main_url: neptune-2.jpg
    - set_three:
        category: Planets
        main_url: neptune-3.jpg

- name: Mars
  category: Planets
  thumb_url: mars-thumb.jpg
  main_url: mars.jpg

/_includes 内的页面(假设它有适当的 Fancybox HTML,我只是想让它尽可能简化):

{% for gallery in site.data.gallery %}

// Main Fancybox
<p>{{ gallery.name }} - {{ gallery.category }}</p>
<img src="{{ gallery.thumb_url }}" /><img src="{{ gallery.main_url }}" />

    {% for ??? in ??? %} // This is where the hidden Fancybox data would be, if it exists
        <p>{{ gallery.main_url }} - {{ gallery.category }}</p>
    {% endfor %}

{% endfor %}

在 YAML 中创建这些分组的缩进规则是什么?如果它们存在,我如何在循环内调用它们?

这就是它现在所做的:

<HTML for Fancybox structure for Saturn>
   <img main image />
   <img thumbnail />
</HTML for Fancybox structure>

<HTML for Fancybox structure for Neptune>
   <img main image />
   <img thumbnail />
</HTML for Fancybox structure>

重复直到画廊完成。

但所需的输出是:如果/当一个特定的画廊项目有多个 Fancybox 图像嵌套在里面,Jekyll 代码将插入它们,正如我在YAML 文件。

所以...

<HTML for Fancybox structure for Saturn>
   <img main image />
   <img thumbnail />
</HTML for Fancybox structure>

<HTML for Fancybox structure for Neptune - which has additional elements>
   <img main image />
   <img thumbnail />
       <img main image 2 />
       <img main image 3 />
</HTML for Fancybox structure>

我希望这是有道理的。我只是想弄清楚嵌套循环的 Jekyll 语法,而并非该循环的每个实例都有嵌套数据。

【问题讨论】:

  • 想要的输出是什么?
  • YAML 中没有嵌套循环,因此为它们找出 YAML 语法可能需要很长时间。您正在寻找的是 Jekyll 语法,它恰好受到 YAML 使用的限制。它也受到使用 UTF-8 的限制,但您希望不要试图找出 UTF-8 中的嵌套循环;-)

标签: loops jekyll liquid


【解决方案1】:

说,这是我的fancybox数据:

# gallery.yml

- name: Saturn
  category: Planets
  thumb_url: saturn-thumb.jpg
  main_url: saturn.jpg

- name: Neptune
  category: Planets
  thumb_url: neptune-thumb.jpg
  main_url: neptune.jpg
  additionals:
    - 
      category: Planets
      main_url: neptune-2.jpg
    - 
      category: Planets
      main_url: neptune-3.jpg

- name: Mars
  category: Planets
  thumb_url: mars-thumb.jpg
  main_url: mars.jpg

那么模板将是:

{% for gallery in site.data.gallery %}

<!-- Main Fancybox -->
  <p>{{ gallery.name }} - {{ gallery.category }}</p>
  <img src="{{ gallery.thumb_url }}" /><img src="{{ gallery.main_url }}" />

  {% if gallery.additionals %}
    <!-- Secondary optional Fancybox -->
    {% for item in gallery.additionals %}
      <p>{{ item.main_url }} - {{ item.category }}</p>
    {% endfor %}
  {% endif %}

{% endfor%}

【讨论】:

  • 感谢您的帮助。由于某种原因,这对我不起作用。我没有收到任何错误,但我认为问题可能出在:{% for item in site.data.gallery.additionals %} - “item”是关键字,还是我必须在 YAML 中有一个项目标记为“项目”的文件?
  • 啊!删除 site.data。工作 - {% for item in gallery.additionals %} - 非常感谢您的帮助!
  • 感谢您指出错误。我会为未来的读者更新答案。
猜你喜欢
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
相关资源
最近更新 更多