Php 调用$item->getProduct()会损坏所选的自定义选项

Php 调用$item->getProduct()会损坏所选的自定义选项,php,magento,Php,Magento,我注意到,对于具有自定义选项的项目,在购物车或结帐中使用item->getProduct会出现一个问题。特别是如果您的购物车有两个相同的产品,但不同的自定义选项选择 例如:购物车包含2个产品A,一个具有大小自定义选项小价格+0美元,另一个具有大价格自定义选项+5美元 我观察了“目录、产品、最终价格”活动 以下是我的观察者函数: public function onGetFinalPrice($observer) { $items = $this->getCheckout()->

我注意到,对于具有自定义选项的项目,在购物车或结帐中使用item->getProduct会出现一个问题。特别是如果您的购物车有两个相同的产品,但不同的自定义选项选择

例如:购物车包含2个产品A,一个具有大小自定义选项小价格+0美元,另一个具有大价格自定义选项+5美元

我观察了“目录、产品、最终价格”活动

以下是我的观察者函数:

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;
}
报价项目的变量$\u optionsByCode似乎没有保留唯一值。调用getProduct会重置这些值,从而损坏它们。有什么解决办法吗?

我建议不要使用目录、产品、最终价格 结帐\购物车\产品\在更好的流程后添加\因为使用此事件可以在购物车上设置产品的任何价格

config.xml中的配置外观:


您可以尝试$item->getFinalPrice而不是$item->getProduct->getFinalPrice吗?调用$item->getProduct是必需的,因为在observer中,我需要从产品中检索信息。我感兴趣的是为什么执行此调用时会重置自定义选项。
<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>