
本文讲解如何在 shopify liquid 模板中通过 `forloop.index` 动态构建 settings 字段名(如 `image-menu1`、`image-menu2`),解决无法直接使用 `{{ block.settings.image-menu{{ forloop.index }} }}` 的语法限制。核心方法是利用 `append: ""` 将数字索引转为字符串后拼接字段前缀。
在 Shopify 主题开发中,常需为每个区块(block)配置多张菜单图,例如 image-menu1、image-menu2……此时若想在 forloop 中按序自动读取对应字段,Liquid 不支持直接插值变量名(如 block.settings.image-menu{{ forloop.index }} 是非法语法)。必须通过字符串拼接 + 动态属性访问的方式实现。
✅ 正确做法如下:
{% for block in section.blocks %}
{% assign index = forloop.index | append: "" %}
{% assign field_name = "image-menu" | append: index %}
@@##@@
Item {{ forloop.index }}
{% endfor %}? 关键点说明:
- forloop.index 返回整数(从 1 开始),需用 | append: "" 转为字符串,才能参与拼接;
- 使用方括号语法 block.settings[field_name] 实现动态属性访问——这是 Liquid 中访问动态键名的唯一可靠方式;
- 避免写成 block.settings.{{ field_name }}(语法错误)或 block.settings.field_name(字面量访问,非动态);
- 若需兼容 forloop.index0(从 0 开始),可改用 forloop.index0 | plus: 1 | append: "" 确保语义一致。
⚠️ 注意事项:
- 确保主题 Schema 中已为每个 block 正确定义了 image-menu1、image-menu2 等字段,否则返回空值;
- 建议添加空值判断提升健壮性:{% if block.settings[field_name] %}...{% endif %};
- 图片 URL 过滤器 img_url: 后的尺寸参数推荐使用标准格式(如 '800x' 或 '800x600'),避免引号不匹配导致编译失败。
通过该模式,你还能轻松扩展至其他动态字段,例如 title-{{ forloop.index }}、link-{{ forloop.index }} 等,大幅提升模板复用性与可维护性。










