在我的基石主题中,我可以使用yaml front-matter这样访问主页上的“新产品”
---
products:
new:
---
但这不适用于模板文件。所以我想知道我是否可以做这样的事情。
utils.api.products.new( { template: 'cart-upsells' }, (err, response) => {
if (err) { return false; }
$upsells.html(response);
});
虽然我不认为utils.api.products.new
存在,但这也不起作用。
如果它是唯一的方式,我也愿意使用BC-api-说我确实从api返回了一堆json,我可以使用车把将其模板化吗?
答案 0 :(得分:4)
新产品在全球范围内可用,因此您应该能够在购物车预览模式下访问它们,而无需调用API。
您能尝试在您的 cart.html 页面上添加新产品的重要内容吗?那应该调用该对象,以便您可以使用{{products.new}}
---
products:
new:
limit:
---
编辑: 要在标题(cart-preview.html)的微型购物车预览中访问新产品对象,可以使用{{inject}}和{{jsContext}}助手来公开新产品对象并对其进行处理。在您的代码中。例如,添加到base.html:
{{inject 'newProducts' products.new}}
<script>
var jsContext = JSON.parse({{jsContext}});
console.log(jsContext.newProducts);
</script>
您可以使用此方法在微型购物车预览中调用jsContext.newProducts。您将要确保所有页面类型(类别,产品,页面,品牌)都调用新产品的主题,以使对象显示出来。
编辑#2:您可以在cart-preview.js选项数组中将“新产品”添加为配置,这应该使cart-preview.html可以访问{{products.new}} 。您的options数组在cart-preview.js中应如下所示:
$cart.on('click', event => {
const options = {
template: 'common/cart-preview',
config: {
products: {
new: {
limit: 3,
},
},
},
};
然后,您可以使用cart-preview.html中的把手来打印属性:
{{#each products.new}}
{{name}}
{{/each}}