Shopify页面内是否可以实例化多个相同的静态section?
问题根因
Shopify 的 Section 机制中,在静态模板中硬编码多次调用同一名称的 Section 时,所有实例会共享同一份 Schema 配置,后台自定义器仅会展示一份配置项,所以所有调用位置的内容会完全一致,这是正常的平台规则,你之前的实现思路没有完全适配平台的限制。
可行解决方案
方案1:使用OS 2.0多实例动态Section(最推荐,支持可视化配置)
该方案适配Shopify Online Store 2.0 主题的标准规则,可以实现每个推荐位独立配置不同集合:
- 保留
youMightLike.liquidSection 中的presets配置,确保它可以被添加到模板中作为动态Section。 - 为你的文章页新建JSON格式模板,在模板的
sections字段下定义多个同类型、不同ID的Section实例,示例配置如下:
{ "sections": { "main-article-content": { "type": "main-article", "settings": {} }, "recommend-1": { "type": "youMightLike", "settings": {} }, "recommend-2": { "type": "youMightLike", "settings": {} } }, "order": ["main-article-content"] }
- 在你写静态文章HTML的
main-article.liquid文件中,对应位置分别调用不同ID的Section实例即可:
<!-- 文章开头的推荐位 --> {% section 'recommend-1' %} <!-- 文章内容 --> <p>文章内容部分</p> <!-- 文章末尾的推荐位 --> {% section 'recommend-2' %}
配置完成后,你可以在店铺后台自定义器中为recommend-1和recommend-2分别选择不同的商品集合,互不影响。
方案2:改用Snippet传参调用(适合固定配置的场景)
如果你不需要在后台可视化修改推荐集合,可以直接把Section改为Snippet实现:
- 将
sections/youMightLike.liquid移动到snippets文件夹下,删除文件中的Schema标签,将集合获取逻辑改为接收传入参数:
<!-- 把原来的获取集合逻辑替换为下面的代码 --> {% assign target_collection = collections[collection_handle] %}
- 在静态文章页的对应位置调用Snippet,传入不同的集合句柄即可:
<!-- 第一个推荐位,传入集合A的句柄 --> {% render 'youMightLike', collection_handle: 'sale-collection' %} <!-- 第二个推荐位,传入集合B的句柄 --> {% render 'youMightLike', collection_handle: 'new-arrival' %}
方案3:单Section多Block按位置渲染
如果你希望只维护一个Section,可以调整Block的渲染逻辑,避免所有内容合并:
- 在Section的Schema中保留Block配置,每个Block对应一个推荐位的集合配置。
- 在Section代码中提前把不同索引的Block配置赋值给独立变量:
{% assign block_1 = section.blocks[0] %} {% assign block_2 = section.blocks[1] %}
- 在静态文章页的对应位置,分别渲染对应Block的内容即可,不需要一次性循环输出所有Block。
内容的提问来源于stack exchange,提问作者dev-jam
相关产品推荐
相关产品推荐

