马真托 |在应用自定义价格(购物车更新)后应用该价格


Magento | Apply a custom price after it has already been applied (Cart Update)

我一直在使用以下方法对产品应用自定义价格:

  • 使用事件"checkout_cart_product_add_after"并分别为其创建了一个函数。

  • 在该函数中,我使用了方法$item->setCustomPrice($value)。

该产品以自定义价格成功添加到购物车中,一切都是正确的。包括适用的税款和总额。但是,当我更新购物车中的相同产品数量并设置另一个自定义价格时,事情就不那么顺利了。

我正在使用事件"checkout_cart_save_after",做我之前提到的完全相同的事情,我遇到了以下问题:

  • 如果我在Magento的后台选择以下税收选项"在目录中显示产品价格:含税",则价格不会进行任何修改。

  • 如果我不包括目录产品价格的税费,则价格会更新。但是,总计仍使用旧的自定义价格。

我不知道我是否为此使用了错误的事件。目前,我觉得我唯一的解决方案是删除产品并以新的自定义价格将其再次添加到购物车中。我相信,这不是正确的方式。

提前感谢所有花时间研究这个问题的人。如果我不清楚我的问题,我很乐意澄清任何问题。

编辑

我将添加一些可能有帮助的更多详细信息:

FOREACH($observer->getCart()->getQuote()->getAllVisibleItems() AS $item){
  $productPrice = $item->getProduct()->getPrice();
  $discountValue = 20; //This will be a custom value that I load with a Web Service
  $value = $productPrice - ($productPrice * $discountValue / 100);
  $item->setCustomPrice($value);
  $item->setOriginalCustomPrice($value);
}

这适用于我的第一个自定义价格更新,而不是前面提到的我的购物车更新。

您需要同时使用观察者事件checkout_cart_product_add_after和checkout_cart_update_items_after

checkout_cart_update_items_after更新购物车中的数量时触发此事件 因此,您还需要使用此事件。

这应该可以解决您的问题:

$item->setCustomPrice($value);
$item->setOriginalCustomPrice($value);