#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 » » на » «, и у вас есть дескрипторы.