以编程方式将产品添加到价格变化的购物车

2022-08-30 09:40:25

我想以编程方式将产品添加到购物车。另外,我想在添加到购物车时更改产品价格。

假设我的产品价格是 100 美元。我想在添加到购物车时将其更改为$ 90。

我已将产品添加到购物车。但是,我无法更改产品价格。

可能吗?

以下是将产品添加到购物车的代码:-

$cart = Mage::getSingleton('checkout/cart');

try {   
    $cart->addProduct($product, array('qty' => 1));
    $cart->save();
}
catch (Exception $ex) {
    echo $ex->getMessage();
}

答案 1

在深入研究了Magento的核心代码之后,我发现你需要使用才能制作和工作。$item->getProduct()->setIsSuperMode(true)$item->setCustomPrice()$item->setOriginalPrice()

下面是一些示例代码,您可以在侦听 或 事件的观察器中使用。该代码在逻辑上是相同的,只是只为一个项目调用,并且为购物车中的所有项目调用。此代码仅作为示例分为/复制到 2 个方法。checkout_cart_product_add_aftercheckout_cart_update_items_aftercheckout_cart_product_add_aftercheckout_cart_update_items_after

事件: 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);
         }
    }
}

答案 2

Magento已经改变了购物车中价格的计算方式,这使得在v1.4以后很难做到这一点。如果您使用 Observer 或其他设备设置价格,则几乎肯定会将其覆盖回目录价格。

实际上,您需要使用购物车规则来实现这一点。


推荐