Как отсортировать теги товаров на основе другого массива в Shopify liquid - PullRequest
0 голосов
/ 17 апреля 2020

У меня проблема с отображением тегов в определенном порядке c, основанном на первой части тега. Например, у меня есть список потенциальных тегов продукта:

category_electronics
size_large 
color_black 
color_brown 
weight_10

И мне нужно, чтобы они сортировались на основе предварительно установленного порядка, примененного к первой части тегов (перед подчеркиванием), например :

size
color
weight
category

Итак, в приведенном выше примере я бы хотел получить список, отсортированный как:

size_large
color_black
color_brown
weight_10
category_electronics

Если бы были известны все полные имена тегов, это было бы просто, как я мог бы просто сделать что-то вроде:

{% assign tags = 'size_large,color_black,color_brown,weight_10,category_electronics' | split: ',' %}

{% for t in tags %}  
    {% assign tag = t | strip %}
    {% if product.tags contains tag %}
          <li>{{ tag }}</li>
      {% endif %}
    {% endfor %}
{% endif %}

Однако это не так. Значение после подчеркивания в теге является переменным, и может быть несколько вхождений любой из групп тегов (ie. Размер выше) для любого отдельного продукта.

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

1 Ответ

0 голосов
/ 17 апреля 2020

Должно работать следующее:

{%- assign tag_groups = "size,color,weight,category" | split: "," -%}

{%- assign sorted_tags = "" -%}
{%- for group in tag_groups -%}
  {% for tag in product.tags %}
    {%- assign tag_group = tag | split: "_" | first -%}
    {%- if tag_group == group -%}
      {%- assign sorted_tags = sorted_tags | append: tag | append: "," -%}
    {%- endif -%}
  {% endfor %}
{%- endfor -%}
{%- assign sorted_tags_arr = sorted_tags | remove_last: "," | split: "," -%}

{%- for tag in sorted_tags_arr -%}
  {{- tag -}}<br>
{%- endfor -%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...