如何在Liquid循环中用forloop.index动态调用block.settings属性
解决Liquid中动态调用block.settings属性的问题
要实现用forloop.index动态拼接属性名访问block.settings里的内容,直接写block.settings.image-menu{{forloop.index}}是行不通的——因为Liquid的点语法(.)只能访问固定名称的属性,动态生成的属性名需要用方括号语法来访问哈希对象。
具体实现方法
方法1:直接在方括号内拼接属性名
把原代码中固定的image-menu1替换成通过append过滤器拼接的动态字符串,再用方括号访问:
{% for block in section.blocks %} {% assign innerloops = forloop.index %} <a href=""> <img src="{{ block.settings['image-menu' | append: forloop.index] | img_url:"800x" }}" alt=""> <p></p> </a> <a href=""> <img src="{{ block.settings['image-menu' | append: forloop.index | plus: 1] | img_url:"800x" }}" alt=""> <p></p> </a> {% endfor %}
如果第二个<a>标签需要对应image-menu2、image-menu4这类递增1的属性名,可以用plus: 1来实现数值累加。
方法2:先定义属性名变量,再通过变量访问
如果需要更清晰的代码结构,可以先把动态生成的属性名赋值给变量,再用方括号访问:
{% for block in section.blocks %} {% assign innerloops = forloop.index %} {% assign imageProp1 = 'image-menu' | append: forloop.index %} {% assign imageProp2 = 'image-menu' | append: forloop.index | plus: 1 %} <a href=""> <img src="{{ block.settings[imageProp1] | img_url:"800x" }}" alt=""> <p></p> </a> <a href=""> <img src="{{ block.settings[imageProp2] | img_url:"800x" }}" alt=""> <p></p> </a> {% endfor %}
关键原理
block.settings本质是一个Liquid哈希(Hash)对象,方括号语法hash[key]允许你用动态生成的字符串作为键来访问对应的值,这是实现动态属性调用的核心。
内容的提问来源于stack exchange,提问作者salil chaudhary
相关产品推荐
相关产品推荐

