【问题标题】:Liquid variable scope between Layout and Template布局和模板之间的液体变量范围
【发布时间】:2016-12-22 23:55:33
【问题描述】:

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

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

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

但布局中定义的变量似乎对模板不可见。大概在评估布局之前评估模板。有没有办法覆盖这种行为?

【问题讨论】:

    标签: shopify liquid


    【解决方案1】:

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

    解决此问题的一种方法是执行两次相同的逻辑,也许在 sn-p 中。然后在 Layout 和模板中放置相同的 sn-p。

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

    编辑: 同样关于 Shopify Liquid 变量范围。 现在还有 {% render %} 标签,它强制调用 sn-p 并显式传入所需的变量。

    例如,您可以使用 include 执行此操作

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

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

    {% render 'icon' name: 'cart' %}
    
    <!-- OR -->
    
    {% assign name = 'cart' %}
    {% render 'icon' name: name %}
    

    使用 render 的好处是变量总是限定在 sn-p 范围内,这可以防止一些令人困惑的错误。此外,Shopify 的服务器上还有很大的速度性能,这将缩短第一个字节的时间。

    【讨论】:

    • 有没有办法在渲染标签中包含从section到sn-p的液体变量?在这种情况下,我们会使用包含还是有更好的不折旧方式?
    • @Mike,实际上我关于如何使用渲染的示例将起作用。我措辞的方式有点令人困惑。我是说你必须明确地传递 name 变量。我会更新答案以更清楚。
    • 我的错误@buts 感谢您的确认。我实际上是出于习惯添加了一个 , 我认为这让我感到困惑 {% render 'icon', name: name %}
    猜你喜欢
    • 2022-11-28
    • 2016-11-25
    • 2012-06-24
    • 2011-06-12
    • 2015-03-25
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多