Shopify 如何在液体中定义全局变量?

Shopify 如何在液体中定义全局变量?,shopify,liquid,Shopify,Liquid,现在,我创建的变量似乎无法跨文件通信。只要使用 {% assign variable = value %} 您应该能够在文件中的任何位置获取该值,以及在分配该值后包含的任何文件 我相信这是最接近全局变量的地方。似乎模板是在主题之前加载的,所以布局/主题文件中设置的变量不会出现在模板中。令人沮丧的。但是,您可以通过代码段进行设置,并将此代码段包含在模板、布局等中。对于Liquid,您可以在include中传递变量 {%- assign global_var = "VALUE" -%} {%- i

现在,我创建的变量似乎无法跨文件通信。

只要使用

{% assign variable = value %}
您应该能够在文件中的任何位置获取该值,以及在分配该值后包含的任何文件


我相信这是最接近全局变量的地方。

似乎模板是在主题之前加载的,所以布局/主题文件中设置的变量不会出现在模板中。令人沮丧的。但是,您可以通过代码段进行设置,并将此代码段包含在模板、布局等中。对于Liquid,您可以在include中传递变量

{%- assign global_var = "VALUE" -%}
{%- include 'YOUR_FILE' global_var: global_var  -%}
对于Shopify liquid,您可以执行以下操作:

有一个解决方法,您可以在主题设置中将全局变量设置为选项
config/settings\u schema.json

  {
    "type": "text",
    "id": "global_variable",
    "label": "global variable",
    "default": "Variable value"
  },
你可以通过

settings.global_variable
但该值取决于在主题设置中输入的内容

如果您需要更动态的方式,可以通过ajax设置购物车属性,如:

    $.ajax({
      type: 'POST',
      url: '/cart/update.js',
      data: { attributes: {'global_variable': "MY_VALUE"} },
      dataType: 'json',
      success: function(cart) {
        location.reload();
      }
    });
然后在主题中的任何位置通过 cart.attributes.global_变量
但每次购物车清空时,您都必须更新它。

我喜欢这个解决方案,因为我们只能在需要变量的模板中包含这个片段。它在2年半前是准确的-我从2016年底开始就没有使用过它,所以现在可能没有什么不同。@dave4jr这肯定是错误的,他们100%可以访问父上下文。但是,当包含代码段以覆盖父上下文时,您可以为其提供自定义变量值。@Dan,我无意中删除了我的注释,但事实并非如此。我刚刚又测试了一次。也许它只是在部分中,但是如果您创建一个变量,在主题的顶部带有assign,然后在它的正下方有一个部分,您将无法访问它。@dave4jr true-节有点像具有特殊作用域规则的自包含模块-这是出于设计-如果您试图将变量传递到节中,那么您尝试的是错误的。我忘了你评论的确切内容,但我说的是片段。@Dan,是的,我的评论是说为了避开它,你可以将父上下文中的变量作为参数传递给节。我想我们说的是同一件事,只是不同而已。英雄联盟