您究竟想用过滤器功能完成什么 - 据我了解,您似乎正试图在一个循环中访问两个相邻的自定义字段?
如果是这种情况,我会尝试使用嵌套的 {{#each}} 循环 - 你会注意到,当你像这样嵌套循环时,有时你需要尝试使用 ../ 到达嵌套上下文之上 - - 老实说,它不是很一致,有时你需要两轮(就像我们在这里所做的那样),有时你需要一个 - 这就是我基本上使用反复试验来确定不同点的东西
{{#each custom_fields}}
{{#if name '==' 'First Custom Field Name'}}
First Value: {{value}}
{{#each ../../custom_fields}}
{{#if name '==' 'Second Custom Field Name'}}
Second Value: {{value}}
{{/if}}
{{/each}}
{{/if}}
{{/each}}
如果您想要一种不那么老套的方法,我建议您使用 stencil-utils 库方便的“按 ID 获取产品”功能:
(https://github.com/bigcommerce/stencil-utils)
您可以调用utils.api.product.getById(productID, {template}, callback) - 这基本上是使用产品模板从 BigCommerce 获取 HTML 响应 - 方便获取仅特定于产品页面但在这些页面之外的数据 - 通常您将使用product-view.html 作为基础——如果您选中quickview.js,这就是 BigCommerce 在产品卡上填充“快速查看”模式的方式。
这对于获取将在您需要的任何其他位置(类别页面、内容页面、博客文章等)呈现在产品页面上的所有数据非常方便。
无论如何,只需几个步骤即可:
首先,在类别卡上公开您产品的id。您只需转到 card.html 并添加一个 data-id="{{id}}" 属性,这样您就可以在页面加载时循环浏览每个属性。
例如:<div class="card" data-id="{{id}}"> ... </div>
接下来,我们将构建一个自定义模板,其中仅包含批量折扣的相关信息。基本上,你可以只使用product-view,但为了避免巨大的有效载荷,我们可以创建一个新模板:
templates/components/products/bulk-discount-rate-fetcher.html:
<div data-bulk-rates="{{json product.bulk_discount_rates}}"></div>
是的,就是这样!
现在是函数的核心,我们将遍历类别页面上的所有产品卡片,我们将使用 stencil-utils 使用批量折扣的简单 JSON 数据标签填充我们的自定义模板:
import utils from '@bigcommerce/stencil-utils';
$('.card').each((index, el) => {
const id = $(el).data('id');
utils.api.product.getById(id, { template: 'products/bulk-discount-rate-fetcher' }, (err, response) => {
if (err) return console.log(err);
const bulkRates = $(response).data('bulk-rates');
console.log(bulkRates);
});
})
结果:
如果您也希望将产品价格纳入此自定义设置,则需要进行一些额外的工作。