Liquid (Shopify) — строка добавления пуста

#string #append #shopify #liquid

#строка #добавить #Shopify #жидкость

Вопрос:

В Shopify я пытаюсь создать строку текущих тегов в моем магазине Shopify.

Если я нахожусь на странице:

 mysite.com/collections/all/tag1 tagC tag4
  

Мне нужно иметь возможность получать текущие теги в виде одной полной строки без пробелов:

 tag1 tagC tag4
  

В настоящее время мой код выглядит следующим образом:

 {% if current_tags %}
    {% assign current_filters = '' %}
    {% for tag in current_tags %}
      {% if forloop.last == false %}
        {{ current_filters | append: tag | handleize | append: ' '}}
      {% else %}
        {{ current_filters | append: tag | handleize}}
      {% endif%}
    {% endfor %}
{% endif %}
  

Если я затем выведу

 {{current_filters}}
  

Я получаю

 tag1  tagC  tag4
  

Во-первых, как мне получить эту строку без пробела после знака плюс? Я безуспешно пытался использовать | strip , а также помещал свой код в {%- -%}

Во-вторых, когда я затем пытаюсь добавить эту current_filters переменную в конец другой переменной, она пуста

 {% assign current_collection = collection.handle %}
{% assign base_url = shop.url | append: '/collections/' | append: current_collection | append: '/' | append: current_filters %}
  

Вывод base_url просто возвращает

 mysite.com/collections/all/
  

не

 mysite.com/collections/all/tag1 tagC tag4
  

Почему это работает, когда я просто использую {{current_filters}} , но не .. append: current_filters

Ответ №1:

Я думаю, вы путаете базовый синтаксис liquid.

{{ ... }} Используются только для вывода данных / содержимого, но не для назначения.

Итак, когда вы говорите:

 {{ current_filters | append: tag | handleize | append: ' ' }} 
// Logic "" (empty value) "tag" (the tag) " " (the string)
  

вы выводите пустое значение current_filters , но добавляете к нему значение tag и . Но в конце вы вообще не изменяете значение current_filters. Таким образом, в конце это все равно будет пустая строка.

Для присвоения / изменения значений вы всегда используете {% ... %} , поэтому в вашем случае вам следует изменить этот код:

 {{ current_filters | append: tag | handleize | append: ' '}} 
  

к этому:

 {% assign current_filters = current_filters  | append: tag | handleize | append: ' ' %}
  

Кроме того, у вас есть join фильтр, который сделает весь приведенный выше код избыточным.

Вы можете просто позвонить {{ current_tags | join: ' ' }} и все готово.

Комментарии:

1. Спасибо. Я новичок в Shopify, поэтому учусь с нуля. Ценю подробный ответ, и теперь это имеет смысл. Есть ли быстрый способ получить дескрипторы тегов (т. е. tag | handleize внутри {{ current_tags | join: ' ' }}

2. @odd_duck Быстрым способом будет использование одной строки, подобной so, {{ current_tags | join: '___' | handle | replace: "___", ' ' }} где мы соединяем их с помощью 3 » » и обрабатываем всю строку, затем мы заменяем 3 » » на » «, и у вас есть дескрипторы.