Section assets
Sections 可以通过以下专门的 Liquid 标签打包自己的 JavaScript 和样式表(stylesheet)资源:
只有当你的 section 打算安装到多个主题或者多个店铺时,你才需要用这些标签。否则的话,直接把 section 需要的 JavaScript 或 CSS 样式放到主题的 assets
目录就可以了。
注意
在 {% javascript %}
或 {% stylesheet %}
标签里,Liquid 语法是不会被渲染的。如果你在里面写了 Liquid 代码,可能会导致语法错误,或者让样式应用失败。
小提示
如果你想在 section 里用主题里已经存在的资源,可以搭配 asset_url
filter,再用 script_tag
filter 或 stylesheet_tag
filter 引用就行了。如果某个资源已经在上层 layout 或 template 中引入过了,那你就不用再引一次了。
javascript
{% javascript %}
标签可以用来给 section 添加 JavaScript:
{% javascript %}
document.querySelector('.slideshow').slideshow();
{% endjavascript %}
注意
每个 section 只能有一个 {% javascript %}
标签,如果有多个,会直接报错。
所有 section 里的 {% javascript %}
内容,Shopify 会自动合并成一个文件,然后通过 content_for_header
Liquid object 注入到主题里。这个文件会通过带 defer
属性的 <script>
标签异步加载。
每段 {% javascript %}
的内容,Shopify 会自动包在一个自执行的匿名函数里,这样变量就只在自己的作用域里有效,而且如果某一段代码运行时出错了,也不会影响到别的 section。
针对实例的 JavaScript
打包的资源每个 section 只会注入一次,不会为每个实例都注入。如果你需要针对每个实例有不同的 JavaScript,可以在 section 的 HTML 标记里加上 data-attributes,然后在你的 JavaScript 里引用这些属性。比如:
<div class="slideshow-wrapper" data-slide-speed="{{ section.settings.speed }}">
<!-- slideshow content -->
</div>
{% javascript %}
var slideshowSpeed = parseInt(document.querySelector('.slideshow-wrapper').dataset.slideSpeed);
{% endjavascript %}
stylesheet
{% stylesheet %}
标签可以用来给 section 添加 CSS 样式:
<div class="slideshow-wrapper" data-slide-speed="{{ section.settings.speed }}">
<!-- slideshow content -->
</div>
{% stylesheet %}
.slideshow-wrapper {
// your styles
}
{% endstylesheet %}
注意
每个 section 只能有一个 {% stylesheet %}
标签,如果有多个,会直接报错。
所有 section 里的 {% stylesheet %}
内容,Shopify 会自动合并成一个文件,然后通过 content_for_header
全局 Liquid object 注入到主题里。
针对实例的样式
打包的样式每个 section 只会注入一次,不会为每个实例都注入。如果你需要每个实例有不同的 CSS 样式,可以直接用内联的 <style>
标签来搞定。