围绕Shopify主题创建,创建循环时遇到一个问题。
我允许主题管理员从1到4种产品中选择要在商店中显示的产品。 他可以从主题的自定义UI中选择它们。
架构为:
{
"type": "product",
"id": "popular_product_1",
"label": "Product N°1"
},
{
"type": "product",
"id": "popular_product_2",
"label": "Product N°2"
},
{
"type": "product",
"id": "popular_product_3",
"label": "Product N°3"
},
{
"type": "product",
"id": "popular_product_4",
"label": "Product N°4"
}
作为测试,如果要我可以使用产品的URL,请返回我的临时文件:
{{ all_products[section.settings.popular_product_1].url }}
它将起作用。但是,当然,我必须重复相同的代码4次... 所以我想创建一个循环,遍历每个循环……
但是如何获取上面要插入的增量编号? 当然了
{{ all_products[section.settings.popular_product_i].url }}
{{ all_products[section.settings.popular_product_{{i}}].url }}
不起作用。
我也尝试过
{% assign i = 1 %}
{% capture popular_product %}section.settings.popular_product_{{i}}{% endcapture %}
{{ all_products[popular_product].url }}
但它也不起作用...似乎变量Popular_product是一个字符串,而实际上却不是它。
WDYT?
答案 0 :(得分:1)
您是否考虑过在基础设置中使用带有块的部分,而不只是使用带编号的产品字段?如果创建“热门产品”部分并定义热门产品块,则可以添加任意数量的产品(或可以指定最大值),然后使用
遍历所有产品{% for block in section.blocks %}
{% assign popular_product = all_products[block.settings.product] %}
<!-- Cool stuff with your popular product -->
{% endfor %}
您可以在https://help.shopify.com/en/themes/development/sections
上了解有关在Shopify中设置板块的更多信息。现在,您使用的方法没有错,但是上面的代码中有一些错误。可以更正这些错误,以获取用于all_products
查找的正确产品句柄。首先:
{{ all_products[section.settings.popular_product_{{i}}].url }}
是不正确的:我们永远不会将Liquid括号括在Liquid括号内。相反,它应该类似于:
{% for i in (1..4) %}
{% assign setting_name = 'popular_product_' | append: i %}
{% assign handle = section.settings[setting_name] %}
{% assign popular_product = all_products[handle] %}
<!-- Cool stuff with our popular_product object -->
{% endfor %}
接下来,capture
变量将评估标记之间的所有内容并将其存储在字符串中。使用时:
{% capture popular_product %}section.settings.popular_product_{{i}}{% endcapture %}
捕获的内容将首先替换i
的值,然后捕获结果字符串,这不是产品句柄!您真正想要的是section.settings
对象中的特定值。
您应该使用capture
来获取所需的popular_product_x
变量,并在section.settings
内部访问该变量。例如:
{% capture field_name %}popular_product_{{i}}{% endcapture %}
{% assign popular_product = all_products[section.settings[field_name]] %}
<!-- Cool stuff with your popular product -->
希望这会有所帮助!
注意:我个人更喜欢将assign
用于上述简单变量,并将capture
仅用于捕获多行代码(例如HTML块),但是其中任何一个都可以在这种情况下。不过,带有capture
的警告:请记住,所有空格也被捕获,这通常与产品句柄或设置名称之类的简单变量无关。
希望这会有所帮助!