奇怪的Shopify Liquid Forloop行为 - 在标签Forloop中使用Forloop时,页面得到了解决

时间:2017-08-09 22:39:08

标签: html loops shopify liquid

我为我的客户创建了一个系统,能够在产品页面上显示产品详细信息/规格表,产品标签与Supply主题的分组过滤器标签类似。带有“Brand_Philips”标签的产品会自动在表格中添加一行,第一列为“Brand”,第二列为“Philips”。

我在主题settings_schema.json中添加了一个输入,所以我的客户端应该能够添加/删除和重新排序细节,我现在要做的只是循环通过新设置并检查是否有匹配的标签并将其添加到表中,但出于某种原因,当我在tags循环中循环细节时,一切正常,当我在详细信息中循环标记时,整个页面都搞砸了。

这是我的代码:

在settings_schema.json中:

{
  "name": "Sort Product Details",
  "settings": [
    {
      "type": "text",
      "label": "Type the product detail tags in a comma-separated list.",
      "id": "product_details",
      "info": "List items must be identical to the tag prefixes (no underscore), and have no spaces between commas.ie. Brand,Avarage Lifetime,Watts,Volts"
    }
  ]
}

在产品页面中我写了这段代码:

{% assign marker = '_' %}
{% assign productDetails = settings.product_details | split: ',' %}
{% assign found = false %}
{% for tag in product.tags %}                             <!-- The tags loop -->
  {% for detail in productDetails %}                      <!-- The details loop -->
    {% if tag contains marker and tag contains detail %}  
      {% if found == false %}
        {% assign found = true %}
        <hr>
        <h3>Product Details:</h3>
        <table class="table-striped">
      {% endif %}
      {{ tag | replace: marker, ': </strong></td><td>' | prepend: '<tr><td><strong>' | append: '</td></tr>' }}
      {% if found and forloop.last %}</table>{% endif %}
    {% endif %}
  {% endfor %}
{% endfor %}

请注意,我在tags循环中循环了详细信息,但是当我在详细信息循环中循环标记时,我的页面全部搞砸了。

以下是我的网页正常情况:

enter image description here

以下是我在详细信息循环中循环标记时页面的外观:

enter image description here 我希望它在详细信息循环中循环标记的原因是我希望我的客户端能够重新排序细节 - 它不应该按字母顺序显示 - 标记循环的工作方式。

提前致谢!

马丁。

1 个答案:

答案 0 :(得分:2)

Shopify forums上提出这个问题后,我得到了答案,并希望在此分享。

之所以搞砸了,原因是关闭</table>标记仅在循环结束时使用此代码{% if found and forloop.last %}</table>{% endif %}添加,并且仅渲染详细信息中包含的标记它从未到达最后一个标签。

所以这是我的固定代码:

{% assign marker = '_' %}
{% assign productDetails = settings.product_details | split: ',' %}
{% assign found = false %}
{% for detail in productDetails %}
  {% for tag in product.tags %}
    {% if tag contains marker and tag contains detail %}
      {% if found == false %}
        {% assign found = true %}
        <hr>
        <h3>Product Details:</h3>
        <table class="table-striped">
      {% endif %}
      {{ tag | replace: marker, ': </strong></td><td>' | prepend: '<tr><td><strong>' | append: '</td></tr>' }}
    {% endif %}
  {% endfor %}
  {% if found and forloop.last %}</table>{% endif %}
{% endfor %}

请注意,标记循环位于详细信息循环中,并且在详细信息循环的末尾添加了结束</table>标记。