【问题标题】:How to use a variable as a key in a hash in liquid (Shopify)如何在液体中使用变量作为哈希中的键(Shopify)
【发布时间】:2019-11-17 16:33:02
【问题描述】:

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

在第二期中,我期待的是: {% if settings.filter_shirts_color %}

【问题讨论】:

  • 您是否可以将元字段写入相关的 Shopify 对象?在商店或集合上使用 json_string 类型的元字段可以让您更接近您的需求?

标签: shopify liquid


【解决方案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 — 哈希还允许使用更短的“点”表示法,其中 变量的名称后跟一个句点和一个键的名称。 这仅适用于不包含空格的键,并且(与 方括号表示法)不允许使用存储的键名 在变量中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2014-10-16
    • 1970-01-01
    • 2013-01-16
    • 2019-06-23
    • 1970-01-01
    相关资源
    最近更新 更多