在 Shopify liquid 框架中动态填充 forloop 数组

Dynamically populate a forloop array in Shopify liquid framework

我正在尝试在 Shopify 中创建我自己的数组,以便我可以轻松地填充一个光滑的滑块。我试过创建一个数字数组,然后用它来调用变量,但它似乎不起作用。我一直在收到 "unexpected character" 等等

{% assign number_group = "1, 2, 3, 4, 5" | split: ','%}
{%- assign block_1_link = "/collections/col-1" %}
{%- assign block_1_title = "Title 1" %}
{%- assign block_1_img = "imglink" %}

{%- assign block_2_link = "/collections/col-2" %}
{%- assign block_2_title = "Title 2" %}
{%- assign block_2_img = "imglink" %}

 <div class="slick-slider-row">

  <div class="wrapper">
   <h2><a href="x">MyCompants</a><h2>

     {% for NUMBER in number_group %}
      {%- assign this_link = "block_"{{NUMBER}}"_link" %}
      {%- assign this_image = "block_"{{NUMBER}}"_img" %}
      {%- assign this_title = "block_"{{NUMBER}}"_title" %}
      <div class="responsive carousel  slider-mobile-hide">
       <div class="slick-slide">
          <a href="{{this_link}}">
            <img class="lazyload" alt="{{ this_title}}" src="{{ 
           this_image}}">
          </a>
          <p><a class="slider-collection-name-link" href="  
         {{this_link}}">{{this_title}}</a></p>
        </div> 
    {% endfor %}

我假设你是液体语言的新手,所以我会尽可能描述清楚。

For 循环

液体中有两种类型的 FOR 循环。

1) 列出数组所有项的标准:

{% for product in collection.products %}

其中 collection.products 是一组产品。

2) 您正在尝试构建的手动数组

{% for i in (1..5) %}

其中 1 是起始索引,5 是结束索引。


流式语法

流式语法有两种类型。

{{  }}

{%  %}

{{ }}用于输出内容,{% %}用于液体逻辑(if/assign/capture/for等...)

你的代码有错误

{%- assign this_link = "block_"{{NUMBER}}"_link" %}

这是一个无效的语法。液体中不能有液体。如果你想这样做,正确的方法是:

{%- assign this_link = "block_" | append: NUMBER | append: "_link" %}

{% capture this_link %}block_{{NUMBER}}_link{% endcapture %}

此外 {{this_link}} 将输出字符串 "block_1_link" 而不是变量 block_1_link

为了输出变量,您需要像 {{[this_link]}} 一样将其括在方括号中,因为您要为其分配一个字符串。

我假设你正在学习,但这种语法可能永远不会出现在真正的项目中,因为你不应该有静态变量

您的代码应该是什么样子

{%- assign block_1_link = "/collections/col-1" %}
{%- assign block_1_title = "Title 1" %}
{%- assign block_1_img = "imglink" %}

{%- assign block_2_link = "/collections/col-2" %}
{%- assign block_2_title = "Title 2" %}
{%- assign block_2_img = "imglink" %}

 <div class="slick-slider-row">

  <div class="wrapper">
   <h2><a href="x">MyCompants</a><h2>

     {% for NUMBER in (1..5) %}
      {%- assign this_link = "block_" | append: NUMBER | append: "_link" %}
      {%- assign this_image = "block_" | append: NUMBER | append: "_img" %}
      {%- assign this_title = "block_" | append: NUMBER | append: "_title" %}
      <div class="responsive carousel  slider-mobile-hide">
       <div class="slick-slide">
          <a href="{{[this_link]}}">
            <img class="lazyload" alt="{{ [this_title] }}" src="{{ [this_image] }}">
          </a>
          <p><a class="slider-collection-name-link" href="  
         {{[this_link]}}">{{[this_title]}}</a></p>
        </div> 
    {% endfor %}