1. shopify theme目录架构介绍
官网文档地址:shopify.dev/docs/storef… 以下内容为我精简的知识点。如果需要了解的更详细,可以直接阅读原文档
1. Layouts(布局)
└── theme
├── layout
| ├── theme.liquid
| ...
├── templates
...
布局是主题的基础,所有模板都通过它进行渲染。
布局是 Liquid 文件,允许你在单一位置包含应在多个页面类型中重复的内容。
布局文件是 .liquid 文件,因此可以使用标准 HTML 和 Liquid 构建内容。
布局中有2个重要的配置
- content_for_header:
content_for_header对象在theme.liquid中是必需的。它必须放置在 HTML<head>标签内。它将 Shopify 所需的所有脚本动态加载到文档头部。 - content_for_layout:
content_for_layout对象会动态输出每个模板的内容。您需要在<body>和</body>HTML 标签之间添加对该对象的引用。
<!DOCTYPE html>
<html>
<head>
...
{{ content_for_header }}
...
</head>
<body>
...
{{ content_for_layout }}
...
</body>
</html>
你可以编辑默认的 theme.liquid 布局,或者你可以创建多个自定义布局文件以满足你的需求。你可以在模板级别指定使用哪个布局,或者是否使用布局:
- 在 JSON 模板中,用于渲染页面的布局通过 layout 属性指定。
// use layout "theme.liquid" file
{
"layout": "theme",
"sections": {...},
"order": [...]
}
- 在 Liquid 模板中,用于渲染页面的布局是通过
layoutLiquid 标签指定的。
// use layout "theme.liquid" file
{% layout 'theme' %}
...
2. Templates(模版)
└── theme
├── layout
├── templates
| ├── 404.json
| ├── article.json
| ...
...
模板控制主题中每种页面渲染的内容。
您可以使用两种不同的文件类型来创建主题模板:JSON 和 Liquid。一个模板只能以 JSON 或 Liquid 模板的形式存在,不能同时存在。例如,如果 product.liquid 已经存在,那么你就不能创建 product.json 。
-
JSON 模板是带有
.json扩展名的数据文件。这些模板允许您轻松地从区域中填充模板内容。商家可以使用主题编辑器添加、删除或重新排列区域。 如果您正在使用 JSON 模板,那么任何 HTML 或 Liquid 代码都需要包含在引用的section中。要了解更多,请参阅 JSON 模板。- 可通过
"settings"覆盖 - 动态配置,适合可视化编辑
-
// 引用sections文件夹下card.liquid这个section文件 { "layout": "theme", "sections": { "card": { "type": "card", "settings":{...} } }, "order": [ "card" ] }
- 可通过
-
Liquid 模板是 Liquid 标记文件,文件扩展名为
.liquid。您可以直接在 Liquid 模板中添加 Liquid 和 HTML。要了解更多,请参阅 Liquid 模板。- 不可覆盖设置
- 硬编码,适合固定内容
-
// 引用sections文件夹下card.liquid这个section文件 {% layout 'theme' %} {% section 'card' %}
3. Sections(章节)
└── theme
...
├── templates
├── sections
│ ├─ header.liquid
...
section是 Liquid 文件,允许您创建可定制的、可重复使用的模块化内容。它们还可以包含blocks,允许商家在section内添加、删除和重新排序内容。
section文件内容是由三个部分组成
-
Main content(可选): 您可以在section中包含任何 HTML 或 Liquid 内容。 section与其他 Liquid 主题文件一样,可以访问全局对象、标签和过滤器,以及以下特定于区域的对象
section对象 - 包含区域的属性和设置值。block对象 - 包含单个区域块的属性和设置值。
-
Assets(可选):
- section可以将其自身的 JavaScript 和样式表资源捆绑,使用以下特定于章节的 Liquid 标签
- {% javascript %}
- {% stylesheet %}
-
Schema(必需):
Sections 支持 {% schema %} Liquid 标签,标签用于定义以下部分属性和设置:
- name 名称
- tag 标签
- class 类
- limit 限制
- settings 设置
- blocks 模块
- app blocks 应用模块
- max_blocks 最大模块数
- presets 预设
- defaults 默认值
- locales 区域设置
- enabled_on 启用
- disabled_on 禁用
使用section文件的方式
4. Sections group(章节组)
└─ theme
...
├─ layout
│ └─ theme.liquid
├─ sections
│ ├─ footer-group.json
│ ├─ header-group.json
│ └─ ...
...
章节组是一个存储待渲染的章节和应用程序块列表及其相关设置的 JSON 数据文件
在大多数主题中,您应该仅对页眉和页脚使用章节组。如果您为主题的其他区域(例如导航侧边栏)创建额外的部分组,则应将章节组命名为反映其预期用途的名称。
您可以在布局文件中添加对章节组的引用
{% sections 'header-group' %}
章节组必须是有效的 JSON 文件,根目录应为一个具有以下属性的对象
{
"type": "header",
"name": "Header Group",
"sections": {
"header": {
"type": "header",
"settings": {}
}
},
"order": ["header"]
}
5. Blocks(模块)
Blocks 允许开发者通过将section拆分为更小、可重用的 Liquid 片段来创建灵活的布局。每个 block 都有自己的settings,可以在section内部添加、删除和重新排序。
有三种类型的 block:
- Theme blocks: 在
/blocks文件夹中作为独立的 Liquid 文件创建,可在多个sections中重复使用。 了解更多关于如何在您的主题中使用主题模块的信息 - Section blocks: 在section的 Liquid 文件中创建,仅限于在该section内使用。 只支持单级层次结构,不能嵌套。 Section blocks 不能与主题块(Theme blocks)在同一个section中使用。 Section blocks是在section的 Liquid 文件中直接定义的,并在section的
{% schema %}标签中进行配置 - App blocks: 由安装在商家店铺中的应用提供。
6. Snippets(代码片段)
└─ theme
...
├─ layout
│ └─ theme.liquid
├─ snippets
│ ├─ product-card.liquid
│ └─ ...
...
代码片段是可重用的 Liquid 代码片段,帮助您在主题中保持一致性并减少重复。它们允许您将复杂的逻辑和标记封装到单独的文件中,这些文件可以在主题中的任何位置进行渲染。
与 sections 和 blocks 不同,代码片段在主题编辑器中对商家不可见。
在您的 Liquid 代码中使用 render 标签来引用代码片段。它接受命名参数,您可以使用这些参数将数据传递给代码片段。
有关将数据传递给代码片段的其他选项,请参阅 render 标签参数。
{% render 'product-card',
product: product,
show_price: true,
max_description_length: 120
%}
Theme Blocks和Snippets都是用于模块化代码的组件,但它们的用途、功能和适用场景有显著区别
结尾
本文主要介绍了shopify的基础知识
更多的细节学习可以直接访问shopify.dev官网