斯巴达克斯加入购物车

Spartacus add to cart

使用 Spartacus,我已经能够更改 PDP 调用以获取一个额外的参数,即商店代码及其工作正常。但是,当我将产品添加到购物车时,api 调用失败,因为未传递商店代码。

我已经开始扩展 active-cart 和 multi-cart 服务以获取我的额外参数,但我正在努力处理未公开的函数中使用的私有变量之一。

我走的路是否正确,或者是否有更简单的方法向此调用添加参数?拦截器会起作用吗?

如果您使用 Spartacus 4,这对您来说是简单的方法。1.x

1 - 创建将提供商店代码的服务(也许您已经有了)

2 - 覆盖 Occ addEntries 端点的原始配置以使用您的附加参数(例如,addEntries: 'users/${userId}/carts/${cartId}/entries?storeCode=${storeCode}'

3 - 从 Spartacus 扩展 OccCartEntryAdapter,在构造函数中注入步骤 1 中的服务,并覆盖 add 方法;方法主体将几乎与原始 Spartacus 代码相同,另外您将从注入的服务中获得 storeCode,并将其添加到 buildUrl 调用:

this.occEndpointsService.buildUrl('addEntries', {
  urlParams: { userId, cartId, storeCode: STORE_CODE },
});

请注意,如果您在正文中定义要发送的值,会有细微的差别。它不会在 urlParams 上,而是在正文中(变量 toAdd),就像下面解释的那样:

1 - 创建将提供商店代码的服务(也许您已经有了)

2 - 从 Spartacus 扩展 OccCartEntryAdapter,在构造函数中注入步骤 1 中的服务,并覆盖 add 方法;方法主体将与原始 Spartacus 代码几乎相同,此外,您将从注入的服务中获得 storeCode,并将其添加到主体中:

const toAdd = {
  quantity,
  product: { code: productCode },
  storeCode: STORE_CODE
};

已更新:如果您使用的是 Spartacus 2.1.x,请使用 URL 查询参数:

1 - 创建将提供商店代码的服务(也许您已经有了)

2 - 从 Spartacus 2.1.8 扩展 OccCartEntryAdapter,在构造函数中注入第 1 步的服务,并覆盖 add 方法;方法主体将几乎与原始 Spartacus 代码相同,另外您将从注入的服务中获得 storeCode,并将其添加到 getUrl 调用:

this.occEndpointsService.getUrl('addEntries', {
  'addEntries',
  {
    userId,
    cartId,
  },
  { code: productCode, qty: quantity, storeCode: STORE_CODE }
);

请告诉我。谢谢!