繁体   English   中英

如何在液体哈希中使用变量作为键(Shopify)

[英]How to use a variable as a key in a hash in liquid (Shopify)

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

在第二期中,我期望这样的内容:{%if settings.filter_shirts_color%}

您试图做的事是不可能的。 如果您在提供的链接Liquid for Designers上进一步阅读,则会提及

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

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

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

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

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

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

但这是行不通的,因为

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM