Как использовать переменную в качестве ключа в хеше в жидкости (Shopify) - PullRequest
0 голосов
/ 08 июля 2019

Я хотел бы установить хеш-переменную, используя строки из массива динамически (вместо написания 1000 строк кода).

Также я хотел бы использовать динамически создаваемую строку для доступа к хешу, используя его в качестве ключа - для встроенного (я предполагаю, что хеш) объекта - настроек. Настройки позволяют вам получить доступ к данным в settings_schema.json, например: settings.my_custom_setting

Согласно этой документации: https://github.com/Shopify/liquid/wiki/Liquid-for-Designers «Для хэшей ключ должен быть литеральной строкой в ​​кавычках или выражением, которое преобразуется в строку.»

поэтому я попытался {% assign filter [thisFilter] = false%}, но получил ошибку: ParseError: недопустимый токен

Первый выпуск / доступ к хеш-ключу с переменной:

{% comment %} All possible filters {% endcomment %}
{% assign allFilters = "color,size,collection,style,height,function,artist" %}
{% assign allFiltersArray = allFilters | split ',' %}

{% comment %} hash of filters each set to false {% endcomment %}
{% for thisFilter in allFiltersArray %}
    {% assign filter[thisFilter] = false %}
{% endfor %}

Вторая проблема, доступ к объекту настроек с помощью динамически генерируемого ключа:

{% comment %} set to true whichever filters are configured in settings for this collection {% endcomment %}
{% for thisCollection in allCollectionsArray %}
    {% if thisCollection == currentCollection %}

        {% for thisFilter in allFiltersArray %}
            {% assign itemToCheck = "filter_" | append: thisCollection | append: "_" | append: thisFilter %}
            {% if settings[itemToCheck] %}
                {% assign filter[thisFilter] = true %}
            {% endif %}
        {% endfor %}

    {% endif %}
{% endfor %}

В первом выпуске я ожидаю, что результатом будет хеш, такой как: filter ['color'] = false (или filter.color = false)? фильтр ['размер'] = ложь

Во втором выпуске я ожидаю что-то вроде: {% if settings.filter_shirts_color%}

1 Ответ

1 голос
/ 08 июля 2019

То, что вы пытаетесь сделать, невозможно.Если вы читаете дальше по предоставленной ссылке Liquid for Designers , будет упомянуто

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

Более того, даже если у вас есть такой хэш, вы не можете присвоить ему новое значение.Например,

{% assign settings['some-setting-id'] = false %}

Это не будет работать.То же самое в случае массива, созданного с использованием фильтра split .Вы не можете назначать новые значения ни для одного индекса.

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

{%assign string_key = 'setting-key'%}
{{settings[string_key]}}

Но это не будет работать, потому что

{%assign string_key = 'setting-key'%}
{{settings.string_key}}

my_hash.key - Хэши также позволяют использовать более короткую "точку"нотация, где после имени переменной следует точка и имя ключа.Это работает только с ключами, которые не содержат пробелов, и (в отличие от записи в квадратных скобках) не позволяет использовать имя ключа, хранящееся в переменной .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...