【问题标题】:How to define global variables in Liquid?如何在 Liquid 中定义全局变量?
【发布时间】:2016-05-07 19:14:55
【问题描述】:

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

【问题讨论】:

    标签: shopify liquid


    【解决方案1】:

    只要你使用

    {% assign variable = value %}
    

    您应该能够在文件中的任何位置获取该值,以及在分配后包含的任何文件。

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

    【讨论】:

    • 2 年半前是准确的 - 自 2016 年底以来我没​​有使用它,所以现在可能不会有所不同。
    • @dave4jr 这绝对是错误的,他们 100% 可以访问父上下文。但是,您可以在包含它们以覆盖父上下文时向 sn-ps 提供自定义变量值。
    • @Dan,我不小心删除了我的评论,但事实并非如此。我刚刚再次测试了它。也许它只是在部分中,但如果你在主题顶部创建一个带有 assign 的变量,然后在它下面有一个部分,你将无法访问它。
    • @dave4jr true - 部分有点像具有特殊范围规则的自包含模块 - 这是设计使然 - 如果您尝试将变量传递到您正在尝试错误的部分。我忘记了您评论的确切内容,但我说的是sn-ps。
    • @Dan,是的,我的评论是说为了绕过它,您可以将父上下文中的变量作为参数传递给该部分。我想我们说的是同一件事,只是不同。大声笑
    【解决方案2】:

    似乎模板是在主题之前加载的,因此在布局/主题文件中设置的变量不会出现在模板中。令人沮丧。但是,您可以通过 sn-p 设置它们,并将此 sn-p 包含在您的模板、布局等中

    【讨论】:

    • 我喜欢这个解决方案,因为我们可以只在需要变量的模板中包含这个 sn-p。
    【解决方案3】:

    对于 Liquid,您可以在 include 中传递一个变量

    {%- assign global_var = "VALUE" -%}
    {%- include 'YOUR_FILE' global_var: global_var  -%}
    

    对于 Shopify 液体,您可以执行以下操作:

    有一个解决方法,你可以在主题设置中将全局变量设置为选项config/settings_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_variable 但是每次购物车为空时您都必须更新它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多