【发布时间】: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类型的元字段可以让您更接近您的需求?