删除 Liquid 中最后一个尾随“,”

tob*_*asg 3 liquid shopify

我为 Shopify 编写了这段代码,该代码创建一个字符串,其中包含产品中明显的所有变体图像 src。然后,它将这个列表与整个product.media对象进行比较,并“过滤掉”与变体图像共享相同 URL 的图像,以便我得到一个仅包含与变体不关联的图像的 URL 的字符串。然后,我可以将这个最终字符串/数组与 for 循环一起使用,该循环仅输出未连接到变体的图像,例如与仅应包含产品的“一般图像”的图库一起使用。

创建它的代码如下所示:

{% comment %}
  Filter out images that is not variant images for gallery use

  variant_image_srcs: String that contains all variant image srcs
  gallery_images: String that created with a for loop and contains images that doesn't match it's src with any of the variant_image_srcs
  gallery_images_array: String that's split and ready to be used with for loop using for example 'image | product_img_url: '1000x' filter

{% endcomment %}
{% capture variant_image_srcs %}
{% for variant in product.variants %}
  {% if variant.featured_image.id != null %}
  {{variant.featured_image.src }}{% if forloop.last != true %}, {% endif %}
  {% endif %}
{% endfor %}
{% endcapture %}

{% capture gallery_images %}
  {% for media in product.media %}
    {% unless variant_image_srcs contains media.preview_image.src %}
      {{media.preview_image.src }}{% if forloop.last != true %}, {% endif %}
    {% endunless %}
  {% endfor %}
{% endcapture %}

{% assign gallery_images_array = gallery_images | split: ", " %}
Run Code Online (Sandbox Code Playgroud)

捕获的内容gallery_images使用了这条不太理想的行:在每个项目的末尾{% if forloop.last != true %}, {% endif %}添加一个, ,以便区分它们。问题在于,media.preview_image.src应添加到字符串中的最后一项并不总是 for 循环中的最后一项,导致捕获的字符串具有输出无法找到的图像的尾随,因为字符串中, 没有。image.src,

variant.featured_image.id != null我想如果返回的话,同样的问题也会适用于第一个 for 循环false

有没有办法从 Liquid 中的字符串右侧删除一组精确的字符(在本例中为 ', '),或者我怎样才能做到这一点,以便 ', ' 不会添加到最后一个真实的项目中?

希望您理解这个问题,我很乐意就如何使其更加防水和有效获得一些意见。

Bil*_*bar 6

除了上述答案之外,另一种可能的方法是使用remove_first字符串过滤器。但为此,您必须先添加逗号,然后添加图像 src。那么你可以删除 if 条件。

{%- capture gallery_images -%}
  {%- for media in product.media -%}
    {%- unless variant_image_srcs contains media.preview_image.src -%}
      {{media.preview_image.src | prepend: "," }}
    {%- endunless %}
  {%- endfor %}
{%- endcapture -%}

{%- assign gallery_images_array = gallery_images| remove_first: "," | split: "," -%}
Run Code Online (Sandbox Code Playgroud)