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

hen*_*lst 5 liquid shopify

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

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

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

但是,布局中定义的变量似乎对模板不可见。大概在评估布局之前先评估模板。有什么方法可以覆盖此行为?

But*_*uts 5

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

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

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

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

例如,你可以这样做 include

{% assign name = 'cart' %}
{% include 'icon' %}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用具有一些性能优势的渲染标签。只需确保明确传递 name 变量即可。

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

<!-- OR -->

{% assign name = 'cart' %}
{% render 'icon' name: name %}
Run Code Online (Sandbox Code Playgroud)

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