collection
collection 模板用于渲染 collection 页面,会列出一个 collection 里面的所有产品。
小提示
可以参考 Dawn 主题里的 collection 模板、它的 banner section,还有 product grid section 来了解一个示例实现。

位置
collection 模板位于主题的 templates 目录下:
└── theme├── layout├── templates| ...| ├── collection.json| ......
内容
你需要在 collection 模板或者它里面的某个 section 里引入 collection object。
collection object
你可以通过 Liquid 的 collection object 来展示 collection 的详细信息。
使用方法
在使用 collection 模板的时候,最好熟悉以下内容:
小提示
如果你用的是 JSON 模板的话,那么所有的 HTML 或 Liquid 代码都必须放到 section 里面,并且由模板引用。
筛选 collections
你可以用 storefront filtering 来把 collection 细分成更小的产品集合。
给 collection 中的产品排序
你可以通过在 collection 页面 URL 上加 sort_by 参数,来控制产品的排序方式,比如:
https://my-store.myshopify.com/collections/frontpage?sort_by=price-descending
通过 collection object,你可以访问到这些内容:
- 用
sort_options属性拿到可选的排序方式。 - 用
sort_by属性拿到当前选中的排序方式(如果有的话)。 - 用
default_sort_by属性拿到默认的排序方式。
你可以把这些排序选项输出到一个 <select> 元素里,让顾客自己选择,然后根据当前选中项和默认值初始化这个下拉框。当顾客换了一个排序方式之后,你可以用 JavaScript 把新的参数加到 URL 上,并刷新页面。
下面是一个简单的排序选择器和配套的 JavaScript 示例:
<select id="sort-by">{% assign sort_by = collection.sort_by | default: collection.default_sort_by %}{% for option in collection.sort_options %}<option value="{{ option.value }}" {% if option.value == sort_by %}selected="selected"{% endif %}>{{ option.name }}</option>{% endfor %}</select><script>Shopify.queryParams = {};// 保留已有的查询参数if (location.search.length) {var params = location.search.substr(1).split('&');for (var i = 0; i < params.length; i++) {var keyValue = params[i].split('=');if (keyValue.length) {Shopify.queryParams[decodeURIComponent(keyValue[0])] = decodeURIComponent(keyValue[1]);}}}// 在下拉框变化时更新 sort_by 参数document.querySelector('#sort-by').addEventListener('change', function(e) {var value = e.target.value;Shopify.queryParams.sort_by = value;location.search = new URLSearchParams(Shopify.queryParams).toString();});</script>
分页展示产品
可以通过 collection object 的 products 属性访问到产品,每页最多显示 50 个。所以你应该给 collection 的产品 做分页,保证所有产品都能被浏览到:
{% paginate collection.products by 20 %}{% for product in collection.products %}<!-- 产品信息 -->{% endfor %}{{ paginate | default_pagination }}{% endpaginate %}
