我想以编程方式将产品添加到购物车。另外,我想在添加到购物车时更改产品价格。
假设我的产品价格是 100 美元。添加到购物车后我想将其更改为 90 美元。
我将产品添加到购物车。但是,我无法更改产品价格。
是否可以?
以下是将产品添加到购物车的代码:-
$cart = Mage::getSingleton('checkout/cart');
try {
$cart->addProduct($product, array('qty' => 1));
$cart->save();
}
catch (Exception $ex) {
echo $ex->getMessage();
}
在深入研究了 Magento 的核心代码后,我发现你需要使用$item->getProduct()->setIsSuperMode(true)
为了要做$item->setCustomPrice()
and $item->setOriginalPrice()
work.
以下是一些示例代码,您可以在侦听的观察者中使用checkout_cart_product_add_after
or checkout_cart_update_items_after
事件。代码在逻辑上是相同的,除了checkout_cart_product_add_after
仅针对一项项目进行调用,并且checkout_cart_update_items_after
购物车中的所有商品都会被调用。此代码被分离/复制到 2 个方法中,仅作为示例。
事件: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);
}
}
事件: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);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)