这是一个产品推荐部分的代码,在购物车和产品详细信息页面上显示相关产品
{% assign itemsPerColumn = columns | times:1 %}
{% assign perCol = count_product | divided_by: itemsPerColumn | ceil %}
{% assign leftOver = count_product | modulo: itemsPerColumn %}
{% assign numCols = perCol | plus: (leftOver > 0) | plus: (count_product == 1) %}
{% for row in (1..rows) %}
<div class="row">
{% for column in (1..columns) %}
{% assign index = (forloop.index0 | times: rows) | plus: row | minus: 1 %}
{% if index < count_product %}
{% assign product = products[index] %}
{% include 'product-card', max_height: max_height, product: product, show_vendor: show_vendor %}
{% endif %}
{% endfor %}
</div>
{% endfor %}
我看到这个错误,无法找到解决方案:
Liquid syntax error (snippets/gp-product-related line 4): Expected dotdot but found comparison in "{{perCol | plus: (leftOver > 0) | plus: (count_product == 1) }}
我尝试使用模块和删除括号
1条答案
按热度按时间niwlg2el1#
该错误是因为括号在Liquid中不是有效语法。
但说实话,你的大部分问题是命名不当的变量(和冗余代码)。让我们一行一行地看,我会指出我看到的所有奇怪的东西:
这是怎么回事?难道你不能直接把
itemsPerColumn
传递给模板,而不是一个名字不好的columns
变量吗?times: 1
的意义是什么?这是多余的代码,删除它。另一个命名不当的变量。看起来你应该在这里分配
numberOfColumns
。此外,您将
camelCase
与snake_case
混合。通常在ruby中,所有变量都使用snake_case
是一种惯例,但这两种样式都是有效的。然而,最好是在你使用的风格上保持一致!我称之为
leftOverItemsCount
,而不是名称模糊的leftOver
。(尽管我们再次混合了camelCase
和snake_case
…)致命错误:在Liquid中括号不是有效的语法!
这段代码实际上根本不需要(正如我将在下面展示的那样),但您可以以某种方式编写此逻辑:
现在,回到我的主要答案。如果我们将所有变量重命名为它们真正代表的内容,逻辑实际上变得非常简单: