Magento更改产品名称添加到购物车

3

我想在将某些产品添加到Magento CE 1.7购物车时更改一些值。

我尝试使用Observer checkout_cart_add_product_complete 来实现这一点。如果我尝试更改产品名称或产品图像,则更改价格(CustomPrice)效果很好,但未保存。

有没有一种方法可以在添加到购物车时更改这些属性?

public function checkout_cart_add_product_complete(Varien_Event_Observer $observer) {
    [...]
            // Set new Price
            $lastAddedItem->setOriginalCustomPrice($originalProduct->getPrice());
            $lastAddedItem->setCustomPrice($originalProduct->getPrice());

            // Set Product-Name
            $lastAddedItem->setName($originalProduct->getName());

            // Set Product-Images
            $lastAddedItem->setImage($originalProduct->getImage());
            $lastAddedItem->setSmallImage($originalProduct->getSmallImage());
            $lastAddedItem->setThumbnail($originalProduct->getThumbnail());

            // Save updated Item and Cart
            //$lastAddedItem->save();
            Mage::getSingleton('checkout/cart')->save();

            // Recalc Totals and save
            $quote->setTotalsCollectedFlag(false);
            $quote->collectTotals();
            $quote->save();

            Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
}
1个回答

9

Mage_Sales_Model_Quote_Item::setProduct函数在每次保存(更新)产品时会重置一些基本信息。幸运的是,有一个名为“sales_quote_item_set_product”的事件可以使用。

config.xml

<config>
...
    <global>
        <events>
            <sales_quote_item_set_product>
                <observers>
                    <samples>
                        <type>singleton</type>
                        <class>samples/observer</class>
                        <method>salesQuoteItemSetProduct</method>
                    </samples>
                </observers>
            </sales_quote_item_set_product>
        </events>
    <global>
...
</config>

Observer.php

class Mynamespace_Samples_Model_Observer
{
    public function salesQuoteItemSetProduct(Varien_Event_Observer $observer)
    {
        /* @var $item Mage_Sales_Model_Quote_Item */
        $item = $observer->getQuoteItem();

        $item->setName('Ians custom product name');

        return $this;
    }
}

好的,谢谢。但这还不是我需要的。因为更改没有按顺序保存。我试图在将产品添加到购物车时更改一些细节。所以它应该出现在结账(购物车/评论)的每个地方,以及之后(帐户->查看订单,...)。而且我不想在结账中的多个位置更改详细信息。 - exe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接