首页 > 解决方案 > (Twig)如何检查从翻译键获取的值(作为字符串或数组?)是否存在于产品变体标题中

问题描述

(Twig)如何检查 Twig 中的产品变体标题(使用多语言)是否存在于翻译键(这是一个字符串,但我可以将其更改为数组)中?

对于网店主题,我想用 CSS 颜色样本替换“product.variant”变量(它是一个平台变量并包含一个变体标题)。电子商务平台没有提供默认的方法来做到这一点,所以我必须建立一个可以使用多语言的解决方法。网店所有者可以为颜色变体输入他们自己的标签(名称),因此如果网店所有者使用字符串“Color”、“color”或“Farbe”(德语)或任何语言的任何标签名称,我的解决方法应该能够检测到“颜色标签名称”并用颜色样本替换这个标签值(通过 CSS,为此我需要知道标签值,它是一个颜色名称,如“蓝色”,我猜在我的 CSS 中我必须用尽可能多的语言总结所有颜色名称才能使它起作用,我' 我害怕,但这没关系)。在我看来,我需要使用自定义翻译键,以便网店所有者可以输入他们想要使用的颜色名称标签,并将这些值与源自电子商务平台的“产品变体”变量进行比较。想不出正确的方法,谁能帮帮我?非常感谢!

这个我试过:

{% for variant in product.variants %}
{% if theme.cstm_translkey_colorswatch_labelname | split(';') in variant.title %}
    <p style="background-color: green;color: yellow">Hi, show me a color swatch please!</p>
{% endif %}
{% endfor %}

下面的代码有效,但它只使用 1 个变体标签名称('Color:'),我需要它是多语言的):

{% for variant in product.variants %}
    {% if 'Color:' in variant.title or 'color:' in variant.title %}
    {% set colorSwatches = true %}
    {% set colorName = variant.title | trim('"Color: ') %}
    {% if colorName not in colorNamesArray %}
        {% set colorNamesArray = colorNamesArray | merge([colorName]) %}
    {% endif %}
 {% endif %}
{% endfor %}

我的目标是拥有一组可以在网上商店运行的所有语言中使用的颜色名称(并且每个颜色名称只存在一次),我可以用 CSS 颜色样本替换它们(最后一部分问题不大)。

(补充:) Variant.title 是产品变体使用的系统变量,它是一个字符串,看起来像一个简单的“尺寸:L”,但也可以包含 2 个或多个属性,例如“尺寸:L,颜色:蓝色,场合:休闲”(如变体矩阵)。从这个值我需要得出是否有一个“颜色”属性(但是:在商店提供的所有语言中),如果是这样,用颜色属性值的颜色中的 CSS 颜色样本替换这个颜色属性(后面的部分“颜色:”),而属性的顺序可能不同(第一个“颜色”,或者可能是最后一个或中间?)。那是因为网络商家可以按照他们想要的任何顺序输入他们自己的变体名称/标签,这就是让它变得复杂的原因(对我来说;)。

另一个变量“theme.cstm_translkey_colorswatch_labelname”是我自己尝试使用自定义翻译键为 webmerchants 定义他们想要使用的键(以及在哪些语言中)用作颜色变体的标签名称,所以我可以使用它与产品“variant.title”进行比较。他们可以在后台输入此翻译键的值(字符串)。但不确定这是否是要走的路...

标签: twig

解决方案


拆分会将字符串转换为数组。这意味着您不能in立即使用。您需要循环所有“语言”:

{% for color in label|split(';') %}
    {% for title in titles %}
        {% if color|lower in title|lower %}
            {{ title }}
        {% endif %}
    {% endfor %}
{% endfor %}

演示


请注意,如果您将属性拆分为title单独的字段或使用诸如transcolor之类的东西进行即时翻译,这会更容易。


推荐阅读