Section assets

Sections 可以通过以下专门的 Liquid 标签打包自己的 JavaScript 和样式表(stylesheet)资源:

只有当你的 section 打算安装到多个主题或者多个店铺时,你才需要用这些标签。否则的话,直接把 section 需要的 JavaScript 或 CSS 样式放到主题的 assets 目录就可以了。

注意

{% javascript %}{% stylesheet %} 标签里,Liquid 语法是不会被渲染的。如果你在里面写了 Liquid 代码,可能会导致语法错误,或者让样式应用失败。

小提示

如果你想在 section 里用主题里已经存在的资源,可以搭配 asset_url filter,再用 script_tag filterstylesheet_tag filter 引用就行了。如果某个资源已经在上层 layout 或 template 中引入过了,那你就不用再引一次了。

javascript

{% javascript %} 标签可以用来给 section 添加 JavaScript:

  1. {% javascript %}
  2. document.querySelector('.slideshow').slideshow();
  3. {% endjavascript %}

注意

每个 section 只能有一个 {% javascript %} 标签,如果有多个,会直接报错。

所有 section 里的 {% javascript %} 内容,Shopify 会自动合并成一个文件,然后通过 content_for_header Liquid object 注入到主题里。这个文件会通过带 defer 属性的 <script> 标签异步加载。

每段 {% javascript %} 的内容,Shopify 会自动包在一个自执行的匿名函数里,这样变量就只在自己的作用域里有效,而且如果某一段代码运行时出错了,也不会影响到别的 section。

针对实例的 JavaScript

打包的资源每个 section 只会注入一次,不会为每个实例都注入。如果你需要针对每个实例有不同的 JavaScript,可以在 section 的 HTML 标记里加上 data-attributes,然后在你的 JavaScript 里引用这些属性。比如:

  1. <div class="slideshow-wrapper" data-slide-speed="{{ section.settings.speed }}">
  2. <!-- slideshow content -->
  3. </div>
  4. {% javascript %}
  5. var slideshowSpeed = parseInt(document.querySelector('.slideshow-wrapper').dataset.slideSpeed);
  6. {% endjavascript %}

stylesheet

{% stylesheet %} 标签可以用来给 section 添加 CSS 样式:

  1. <div class="slideshow-wrapper" data-slide-speed="{{ section.settings.speed }}">
  2. <!-- slideshow content -->
  3. </div>
  4. {% stylesheet %}
  5. .slideshow-wrapper {
  6. // your styles
  7. }
  8. {% endstylesheet %}

注意

每个 section 只能有一个 {% stylesheet %} 标签,如果有多个,会直接报错。

所有 section 里的 {% stylesheet %} 内容,Shopify 会自动合并成一个文件,然后通过 content_for_header 全局 Liquid object 注入到主题里。

针对实例的样式

打包的样式每个 section 只会注入一次,不会为每个实例都注入。如果你需要每个实例有不同的 CSS 样式,可以直接用内联的 <style> 标签来搞定。