EN
Shopify 知识库 · 指南

Horizon 集合与搜索:结果、筛选和分页的分工

基于 Horizon 4.2.0 源码,区分 Shopify 集合页与搜索结果页的数据来源、商品网格、筛选 URL 和分页控制器,以及预测搜索入口。
历史资料
请结合文中的适用版本和来源阅读。

本文基于 Horizon 4.2.0,源码固定到 5acd1b6(核验于 2026-10-07)。结论限于此 commit,不表示其他版本行为相同;本篇为源码分析,未完成店铺运行验证。

集合页和搜索结果页都显示商品网格,但数据来源和空结果处理不同。先确认资源,再追踪筛选与分页,能避免把所有结果展示归给一个控制器。

集合与搜索共用什么

sections/main-collection.liquid 对集合商品分页,组织筛选块与商品卡;sections/search-results.liquid 对搜索结果分页,在有结果时筛出商品,在无结果时选择备用集合商品。

两者都将捕获的卡片内容交给 snippets/product-grid.liquid。因此,无搜索结果时看到商品并不自动意味着搜索命中;必须看它处于哪个分支,以及页面如何说明这些商品的来源。

三类 JavaScript 职责

入口已核对的职责阅读时的问题
assets/results-list.js结果布局控制,继承分页列表;移动端单列视图下把卡片图片 sizes 改为 100vw网格密度或布局怎样变化
assets/facets.js收集筛选参数、更新地址、请求分区URL 是否保留了当前筛选与查询
assets/paginated-list.js分页内容与前后页处理下一页怎样进入列表与浏览历史

筛选块的初始标记见 blocks/filters.liquid。不能仅因为主 Section 引入 results-list.js,就把筛选请求、URL 和全部分页逻辑都归给这一个文件。

预测搜索另有入口

sections/predictive-search.liquid 服务于预测搜索片段。它与完整搜索结果页面的职责不同:输入时的建议、打开搜索界面和提交后的结果页,应分别跟踪,而不是以一个截图代表全部搜索行为。

验证结果是否一致

检查筛选后的 URL、结果数量、已选条件和商品列表是否一致;再测清除条件、无结果、第二页与浏览器返回。无限滚动和普通分页应分别验证,不用一个模式的结果替另一个模式背书。

本篇没有执行真实搜索请求或滚动测试。卡片内部行为见商品卡,分区请求的基本阅读方法见架构总览。

源码基线