Magento : how to change item price when adding it into the cart
第一种写法
After digging a bit into Magento’s core code, I found that you need to use $item->getProduct()->setIsSuperMode(true) in order to make $item->setCustomPrice() and $item->setOriginalPrice() work.
Here is some sample code you can use within an Observer that listens for the checkout_cart_product_add_after or checkout_cart_update_items_after events. The code is logically the same except checkout_cart_product_add_after is called for only one item and checkout_cart_update_items_after is called for all items in the cart. This code is separated/duplicated into 2 methods only as an example.
Event: checkout_cart_product_add_after /** * @param Varien_Event_Observer $observer */ public function applyDiscount(Varien_Event_Observer $observer) { /* @var $item Mage_Sales_Model_Quote_Item */ $item = $observer->getQuoteItem(); if ($item->getParentItem()) { $item = $item->getParentItem(); } // Discounted 25% off $percentDiscount = 0.25; // This makes sure the discount isn't applied over and over when refreshing $specialPrice = $item->getOriginalPrice() - ($item->getOriginalPrice() * $percentDiscount); // Make sure we don't have a negative if ($specialPrice > 0) { $item->setCustomPrice($specialPrice); $item->setOriginalCustomPrice($specialPrice); $item->getProduct()->setIsSuperMode(true); } }
Event: checkout_cart_update_items_after
/** * @param Varien_Event_Observer $observer */ public function applyDiscounts(Varien_Event_Observer $observer) { foreach ($observer->getCart()->getQuote()->getAllVisibleItems() as $item /* @var $item Mage_Sales_Model_Quote_Item */) { if ($item->getParentItem()) { $item = $item->getParentItem(); } // Discounted 25% off $percentDiscount = 0.25; // This makes sure the discount isn't applied over and over when refreshing $specialPrice = $item->getOriginalPrice() - ($item->getOriginalPrice() * $percentDiscount); // Make sure we don't have a negative if ($specialPrice > 0) { $item->setCustomPrice($specialPrice); $item->setOriginalCustomPrice($specialPrice); $item->getProduct()->setIsSuperMode(true); } } }
调试
Mage::log($loginfo, null, "logfile.log");
第二种写法
You can use an observer class to listen to checkout_cart_product_add_after, and use a product’s “Super Mode” to set custom prices against the quote item.
In your /app/code/local/{namespace}/{yourmodule}/etc/config.xml:
<config> ... <frontend> ... <events> <checkout_cart_product_add_after> <observers> <unique_event_name> <class>{{modulename}}/observer</class> <method>modifyPrice</method> </unique_event_name> </observers> </checkout_cart_product_add_after> </events> ... </frontend> ... </config>
And then create an Observer class at /app/code/local/{namespace}/{yourmodule}/Model/Observer.php
<?php class <namespace>_<modulename>_Model_Observer { public function modifyPrice(Varien_Event_Observer $obs) { // Get the quote item $item = $obs->getQuoteItem(); // Ensure we have the parent item, if it has one $item = ( $item->getParentItem() ? $item->getParentItem() : $item ); // Load the custom price $price = $this->_getPriceByItem($item); // Set the custom price $item->setCustomPrice($price); $item->setOriginalCustomPrice($price); // Enable super mode on the product. $item->getProduct()->setIsSuperMode(true); } protected function _getPriceByItem(Mage_Sales_Model_Quote_Item $item) { $price; //use $item to determine your custom price. return $price; } }
参考及引用
本文源 自互联网仅供学习和交流 使用
Magento : how to change item price when adding it into the cart
Programmatically add product to cart with price change
转载请注明:(●--●) Hello.My Weicot » Magento1x 添加购物车时修改指定指定分类产品的价格 how to change item price when adding it into the cart