【问题标题】:Shopify - using if statements within js.liquid and scss.liquid filesShopify - 在 js.liquid 和 scss.liquid 文件中使用 if 语句
【发布时间】:2017-01-20 11:51:12
【问题描述】:

我正在尝试将 JS 文件合并到一个文件中,但是我需要使用 js 文件中的 if 语句来设置条件。

我创建了 file.js.liquid,但它似乎不起作用;例如,我添加了一个测试:

{% if template contains 'index' %}
  console.log('homepage loaded');
{% endif %}

我正在尝试做的事情的例子,当然还有很多我需要做的事情。

{% if settings.the_simpsons_enabled and settings.simpsons_video_enable %}
  // video popup
  $(".video-popup").videoPopup();
{% endif %}

条件语句在 scss.liquid 文件中也不起作用:

{% if template contains 'index' or template contains 'collection' or template contains 'product' %}
  @import url("{{ 'owl.carousel.scss' | asset_url }}");
{% endif %}

任何想法为什么如果它不起作用或什至可能?我认为它是一个液体文件。

【问题讨论】:

  • 你不能使用@import。
  • 你为什么不直接连接 JS 并用 gulp 之类的东西缩小/连接 SASS?

标签: javascript css sass shopify liquid


【解决方案1】:

像 CSS 或 JS 这样的文件上的 Liquid 扩展允许使用 Liquid 变量,但不允许使用语句。

所以 {{ write_my_liquid_var_here }} 会起作用。 {% if liquid_statement %}do something{% endif %} 不会。

【讨论】:

  • 似乎有点无意义,我是shopify plus客户,也有几个网站,所以可能会和他们谈谈,看看是否可以添加大声笑我试图减少页面上的css / js文件请求有一些应用商店安装的应用程序没有帮助....谷歌洞察测试在移动和桌面上得分较低,这是我试图减少你看到的。
【解决方案2】:

关于 Shopify 和 SASS

以下内容不起作用,因为您不能在 Shopify 的 SASS 文件中使用 @import

@import url("{{ 'owl.carousel.scss' | asset_url }}"); //This will not work

关于在 .js.liquid 文件中使用条件流式语句

我并不完全了解这个主题,但我知道以下两件事。

1) 查看this thread,你会发现这种类型的语句是行不通的,因为js文件是独立于普通的液体模板解析的,所以它不知道你正在查看哪个模板。

{% if template contains 'index' %} //This will not work

放置上述逻辑的更好位置是在</body> 标记上方的theme.liquid 文件底部。然而,这并不能帮助您实现通过使用一个 JavaScript 文件来减少 HTTP 请求的目标。

2) 但是,您可以访问 settings_data.json 文件中的值

{% if settings.the_simpsons_enabled and settings.simpsons_video_enable %} //This will work

希望对你有帮助

【讨论】:

  • 刚看到这个,但实际上导入确实有效....但发现它仍然在页面加载时加载了 css 文件,所以不是我需要的解决方案,因为我试图减少 css 和 js 的数量文件在页面加载时加载很多....试图加快加载时间一点,谷歌洞察页面测试在桌面和移动设备上得分很低,所以也试图改善这些,但发现很难通过有限的 shopify 和 3rd该网站还安装了派对应用程序大声笑
  • 我是 shopify plus 客户,也有几个网站,所以可能会与他们交谈,看看是否可以添加,我认为他们最大的客户之一,所以可能能够完成这个 lol im试图减少页面上的 css / js 文件请求,而商店安装的应用程序无济于事....谷歌洞察力测试在移动和桌面上得分较低,这是我试图减少的你看。
  • James,如果您的部分 JavaScript 需要使用 Shopify 对象,例如 templateproductcustomer,您可以将这些 <script> 放在普通的液体模板中。当我想访问它们时,我将它们放在theme.liquid 的末尾并且它可以工作(这可能有助于减少 HTTP 请求,但可能不是大型代码块的最佳解决方案)
  • 是的,这就是当前的情况,包括它们,但正如您所见,不会减少 HTTP 请求
  • 这可能不是最优雅的想法,但您能否创建一个包含 <script> 标记中的所有 JS 代码的液体 sn-p 文件,并通过液体将其包含在您的 theme.liquid 文件中?这样,它们将在服务器级别组合。它实际上不会链接到外部脚本文件,也不会弄乱您的 theme.liquid 模板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 2014-11-16
相关资源
最近更新 更多