Weird Shopify Liquid Forloop Behavior - страница портится при использовании Forloop внутри тега Forloop

Я создал систему для моего клиента, чтобы иметь возможность отображать на страницах продуктов таблицу деталей / спецификаций с тегами продукта, которая работает аналогично сгруппированным тегам фильтра темы Supply, например. продукт, имеющий тег «Brand_Philips», автоматически добавит строку в таблицу, в которой первый столбец будет «Бренд», а второй - «Philips».

Я добавил ввод в тему settings_schema.json, поэтому мой клиент должен иметь возможность добавлять / удалять и переупорядочивать детали, и все, что мне теперь нужно сделать, это просто пройти через новый параметр и проверить, есть ли соответствующий тег, и добавить его. в таблицу, но по какой-то причине, когда я зацикливаю детали в цикле тегов, все работает нормально, а когда я зацикливаю теги в деталях, вся страница портится.

Вот мой код:

В 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 %}

Обратите внимание, что я зацикливаю детали в цикле тегов, но когда я зацикливаю теги в цикле деталей, моя страница все портится.

Вот как обычно выглядит моя страница:

введите здесь описание изображения

А вот как выглядит моя страница, когда я зацикливаю теги в цикле деталей:

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

Заранее спасибо!

Мартин.


person martin schwartz    schedule 09.08.2017    source источник


Ответы (1)


Задав этот вопрос на Форумы Shopify Я получил ответ и хотел бы поделиться им здесь.

Причина, по которой все это испортилось, заключается в том, что закрывающий тег </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> добавляется в конец цикла сведений.

person martin schwartz    schedule 10.08.2017