我注意到在购物车或结帐时使用item-> getProduct()的问题,对于具有自定义选项的项目。特别是如果您的购物车中有两个相同的产品但是有不同的自定义选项选项。
例如:购物车包含2 x产品A,其中一个包含尺寸较小的自定义选项(价格+ $ 0),另一个包含自定义选项大尺寸(价格+ $ 5)。
我观察事件'catalog_product_get_final_price'
这是我的观察者功能:
public function onGetFinalPrice($observer)
{
$items = $this->getCheckout()->getQuote()->getAllItems();
foreach($items as $item){
$product = $item->getProduct();
}
}
购物车中两件商品的价格现在为+ 5美元。 这是来自Mage_Sales_Model_Quote_Item_Abstract的getProduct函数:
public function getProduct()
{
$product = $this->_getData('product');
if ($product === null && $this->getProductId()) {
$product = Mage::getModel('catalog/product')
->setStoreId($this->getQuote()->getStoreId())
->load($this->getProductId());
$this->setProduct($product);
}
/**
* Reset product final price because it related to custom options
*/
$product->setFinalPrice(null);
if (is_array($this->_optionsByCode)) {
$product->setCustomOptions($this->_optionsByCode);
}
return $product;
}
似乎报价项的变量$ _optionsByCode不保留唯一值。调用getProduct()会重置这些值,从而破坏它们。有什么想法可以解决这个问题吗?
答案 0 :(得分:0)
我建议使用而不是catalog_product_get_final_price
checkout_cart_product_add_afte
更好的流程。因为使用了this event you set any price of product at cart.
配置:
<events>
<checkout_cart_product_add_after>
<observers>
<apply_custom_price>
<class>custompriceset/observer</class>
<method>applyCustomPrice</method>
</apply_custom_price>
</observers>
</checkout_cart_product_add_after>
</events>