布局和模板之间的液体可变范围

Liquid variable scope between Layout and Template

是否可以在模板文件中可见的布局文件中定义液体变量?

布局(例如theme.liquid)中定义的变量对通过<% include %>包含的任何片段可见(反之亦然)。

模板(例如index.liquid)中定义的变量在通过<% include %>(例如product-grid-item.liquid)包含的任何片段中可见并且在布局文件中也可见

然而,布局中定义的变量似乎对模板不可见。据推测,模板是在评估布局之前评估的。有什么方法可以覆盖此行为吗?

目前在 Shopify 中,无法将 Liquid 变量从布局传递到模板中。

解决这个问题的一种方法是将相同的逻辑执行两次,也许是在一个片段中。然后在布局和模板中放置相同的片段。

另外值得注意的是 Shopify Liquid 范围的主题,因为它没有在任何地方记录,是在部分内部定义的变量在该部分的范围内,不能在外部访问。

编辑: 同样是关于 Shopify Liquid 变量范围的主题。 现在还有 {% render %} 标记,它强制使用显式传入的所需变量调用代码段。

例如,您可以使用 include

{% assign name = 'cart' %}
{% include 'icon' %}

或者,您可以使用具有一些性能优势的渲染标记。只需确保您显式传递名称变量即可。

{% render 'icon' name: 'cart' %}

<!-- OR -->

{% assign name = 'cart' %}
{% render 'icon' name: name %}

使用 render 的好处是变量总是限定在代码段内,这可以防止一些令人困惑的错误。另外,Shopify 的服务器上有一个很大的速度性能,这将改进第一个字节的时间。