如何将变量用作液体(Shopify)中的哈希中的键

时间:2019-07-08 07:28:32

标签: shopify liquid

我想动态地使用数组中的字符串设置一个哈希变量(而不是编写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'] =假(或filter.color =假)? filter ['size'] = false

在第二期中,我期望这样的事情: {%,如果是settings.filter_shirts_color%}

1 个答案:

答案 0 :(得分:1)

您无法执行的操作。如果您进一步阅读提供的链接Liquid for Designers,则会提及该链接

  

请注意,无法将文字数组或哈希值写为   表达;数组和哈希必须传递到模板中,或者   标签或输出语句倾斜构造。

此外,即使您具有此类哈希,也无法为其分配新值。例如,

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

这将不起作用。使用 split 过滤器创建的数组也是如此。您不能在任何索引上分配新值。

对于第二个问题,这应该可以解决,在您的情况下,该错误很可能是由于生成的字符串无效或该ID没有设置。这样应该可以正常工作并显示该设置的值。

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

但这不会起作用,因为

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

my_hash.key-散列还允许使用较短的“点”表示法,其中   变量名后跟一个句点和一个键名。   这仅适用于不包含空格的键,并且(与   方括号符号)不允许使用存储的密钥名称   在变量中