在 shopify liquid 中使用 'strings' 作为 'arrays'

working with 'strings' as 'arrays' in shopify liquid

我正在尝试根据项目变体在项目旁边显示颜色框。但是,它一直在我的阵列中给我奇怪的结果。是的,我知道液体中没有真正的阵列。我在下面有两个选择。第一个不起作用。它给了我 "background-color: [''''''' " 之类的东西。以及所有正确的。

所以第二个选项我只是对所有颜色进行硬编码并进行检查。只要颜色有序,这就有效......但如果颜色不有序,它将显示重复项。

液体的新手,但这看起来超级难看,可能意味着我做错了。

    <div class="color-box-wrapper">
        {% assign values = '' %}
        {% for variant in product.variants %}
        {% assign value = variant.option2%}
        {% unless values contains value %}

        {% assign values = values | append: ',' | append: value %}
        {% assign values = values | split: ',' %}

        {% for color in values %}
        {% if color.size > 0%}

        <div class="product-color-box" style="background-color:{{color}}"></div>

        {% endif %}
        {% endfor %}
        {% endunless %}
        {% endfor %}

    </div>

这种方式有点效果,但看起来很老套。

 <div class="color-box-wrapper">
        {% assign realColors = 'yellow, blue, white, burgandy, black, red, green, purple, beige, light_brown' | split: ", "%}
        {% assign values = '' %}
        {% for variant in product.variants %}
        {% assign value = variant.option2 | downcase%}
        {% unless values contains value %}

        {% assign values = values | append: ',' | append: value %}
        {% assign values = values | split: ',' %}

        {% for color in values %}
        {% if realColors contains color %}

        <div class="product-color-box" style="background-color:{{color}}"></div>

        {% endif %}
        {% endfor %}
        {% endunless %}
        {% endfor %}

    </div>

使用 product.options_with_values 字段可能效果更好,像这样:

{% assign color_option = product.options_with_values | where: 'name', 'color' | first %}
<h1>Color option is in position {{ color_option.position }}!</h1>
<h2>Array of all values is: {{ color_option.values | json }}</h2>


{% for value in color_option %}
  <h3>Gimmie a {{ value }}!! {% if value == color_option.selected_value %}(Selected){% endif %}</h3>
{% endfor %}

如果您的颜色不是 CSS 可识别的颜色名称,那就有点棘手了,但是您当然可以为此做很多事情。我通常更喜欢添加一个 CSS 层,可以将颜色值转换为适当的显示值(背景图像或颜色十六进制代码)。一些想法是:

  • 向您的元素添加数据属性或 class(通常使用 | handle 过滤器来标准化输出)并使用 CSS sheet 分配背景图片或颜色适当
  • 创建一个包含允许您将颜色值映射到十六进制代码的块的部分。如果您是为自己以外的其他人创建这个,它将允许商家自己设置颜色并微调所有色调。
  • 在您的产品上使用元字段,这些元字段可以使用选项作为查找来生成正确的颜色代码。 (例如:如果您在 product.metafields.colors 的产品上创建元字段命名空间,并使用颜色名称作为键,使用十六进制代码作为值,则可以输出 {{ product.metafields.colors[value] }} 以获得正确的计算机颜色。(这通常需要安装一个应用程序来管理——尽管元字段本身是 Shopify 的原生功能,但 Shopify 没有任何原生方式在管理员中设置它们)

希望对您有所帮助!


参考文献:

Shopify 液体参考 - 产品对象:https://help.shopify.com/en/themes/liquid/objects/product#product-options_with_values

Shopify 液体参考 - 产品选项对象(来自 options_with_values):https://help.shopify.com/en/themes/liquid/objects/product_option