(树枝)如何检查产品变体标题中是否存在从转换键(作为字符串或数组?)中获取的值

时间:2019-05-25 15:26:19

标签: twig

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

对于一个网店主题,我想用CSS颜色样本替换“ product.variant”变量(这是一个平台变量,并包含一个变体标题)。电子商务平台未提供执行此操作的默认方法,因此我必须构建一种应使用多种语言的解决方法。 Webshop所有者可以输入自己的颜色变体标签(名称),因此,如果Webshop所有者使用字符串“ Color”,“ color”或“ Farbe”(德语)或任何语言的任何标签名称,我的解决方法应该能够检测到“颜色标签名称”,并用颜色样本替换该标签值(通过CSS,为此,我需要知道标签值,它是一个像“ blue”之类的颜色名称,在我的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个变体标签名称(“颜色:”),我需要多语言):

{% 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是要使用的产品变体的系统变量,它是一个字符串,看起来像一个简单的“ Size:L”,但也可以包含2个或更多属性,例如“ Size:L,Color:Blue,Occasion” :休闲”(如变体矩阵)。从这个值中,我需要得出是否有一个“颜色”属性(但是:商店提供的所有语言),如果是,则用颜色属性值的颜色中的CSS颜色样本替换该颜色属性(后面的部分“颜色:”),而属性的顺序可以不同(第一个“颜色”,或者最后一个还是中间?)。那是因为网络商人可以按照他们想要的任何顺序输入他们自己的变体名称/标签,这使得它变得复杂(对我来说;)。

另一个变量“ theme.cstm_translkey_colorswatch_labelname”是我自己的工作,试图为网络商家使用自定义翻译键来定义他们要使用哪些键(以及以哪种语言)用作颜色变体的标签名,因此我可以将其与产品“ variant.title”进行比较。他们可以在后台为该转换键输入值(字符串)。但是不确定这是否可行...

1 个答案:

答案 0 :(得分:0)

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

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

demo


请注意,如果您将title中的属性拆分为单独的字段,或者使用类似trans的东西来即时翻译color,则这样做会更容易。