目前我已经将 vue-storefront 连接到 magento2 并且一切都按预期工作
有一个要求,如果在 magento 末端的购物车中添加了另一个具有相同但具有附加属性的相同产品sku
,它应该在 vue 店面的购物车中显示为不同的项目。id
options
几乎就像 magento 的捆绑产品,但在此它作为单独的项目添加到 magento 购物车中。
因此,当 vuestore 从服务器中提取项目时,我可以看到所有项目,包括相同的 sku 项目。
但因为它具有相同的 sku 和 id。它没有添加到 vuestore 购物车中。
我已经浏览了 vue-storefront 核心代码,并对我的测试进行了一些更改。
例如下面的代码进行比较。
添加了这个core/modules/cart/helpers/productsEquals.ts
if (getAdhesiveGroutOptions(product1, 'options').length || getAdhesiveGroutOptions(product2, 'options').length) {
// in admin panel we can add different sku for specific custom option so we can't rely on 'sku'
// by default we want to check server_item_id ('id'), we can also use 'checksum'
if(product1.sku && product2.sku && product1.sku === product2.sku){
//Seems like they are same products, so just check if their options are similar as well.
console.log('FullObjectAdhesiveGrouts', product1, product2);
let adhesiveGroutOptions2 = getAdhesiveGroutOptions(product2, 'options');
let adhesiveGroutOptions1 = getAdhesiveGroutOptions(product1, 'options');
console.log('JustTheAdhesiveGroutOptions', adhesiveGroutOptions1, adhesiveGroutOptions2);
if(product1.item_id){
if(product2.totals && product2.totals.options && product2.totals.options.length > 0){
return product1.item_id === product2.totals.item_id
}
}else{
if(product2.item_id && product1.totals && product1.totals.options && product1.totals.options.length > 0){
return product2.item_id === product1.totals.item_id
}
}
}
return false;
}
但我仍然试图找出这种附加条件存在于何处检查类似 sku。
好像我添加了另一个具有不同 sku 和产品 ID 的产品,然后在 vuestore 的页面加载时,拉取调用也会将 magento 上新添加的项目更新到 vuestore 购物车。