马根托 |在已应用自定义价格后应用自定义价格(购物车更新)
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 的后台选择以下税收选项 "Display Product Prices In Catalog: Including Tax",价格不会有任何修改。
如果我不在目录产品价格中包含税费,价格会更新。不过合计还是沿用旧的自定义价格。
我不知道我是否为此使用了错误的事件。目前我觉得我唯一的解决方案是删除产品并以新的自定义价格将其重新添加到购物车。我认为这不是正确的方法。
提前感谢所有花时间看这个问题的人。
如果我不清楚我的问题,我很乐意澄清任何问题。
编辑
我将添加更多可能有帮助的详细信息:
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);
}
这适用于我的第一次自定义价格更新,而不是之前提到的我的购物车更新。
这应该可以解决您的问题:
$item->setCustomPrice($value);
$item->setOriginalCustomPrice($value);
您需要同时使用观察者事件 checkout_cart_product_add_after 和 checkout_cart_update_items_after
checkout_cart_update_items_after 当您更新购物车中的数量时会触发此事件所以您也需要使用此事件。
我一直在使用以下方法为产品应用自定义价格:
使用了事件"checkout_cart_product_add_after"并分别为其创建了一个函数。
在该函数中,我使用了 $item->setCustomPrice($value) 方法。
产品以自定义价格成功添加到购物车,一切正确。包括适用的税款和总额。 但是,当我更新购物车中相同的产品数量并设置另一个自定义价格时,事情就不太顺利了。
我正在使用事件 "checkout_cart_save_after",做我之前提到的完全相同的事情,但我遇到了以下问题:
如果我在 Magento 的后台选择以下税收选项 "Display Product Prices In Catalog: Including Tax",价格不会有任何修改。
如果我不在目录产品价格中包含税费,价格会更新。不过合计还是沿用旧的自定义价格。
我不知道我是否为此使用了错误的事件。目前我觉得我唯一的解决方案是删除产品并以新的自定义价格将其重新添加到购物车。我认为这不是正确的方法。
提前感谢所有花时间看这个问题的人。 如果我不清楚我的问题,我很乐意澄清任何问题。
编辑
我将添加更多可能有帮助的详细信息:
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);
}
这适用于我的第一次自定义价格更新,而不是之前提到的我的购物车更新。
这应该可以解决您的问题:
$item->setCustomPrice($value);
$item->setOriginalCustomPrice($value);
您需要同时使用观察者事件 checkout_cart_product_add_after 和 checkout_cart_update_items_after
checkout_cart_update_items_after 当您更新购物车中的数量时会触发此事件所以您也需要使用此事件。