在Magento中以编程方式将1个产品正确添加到购物车

时间:2014-12-02 17:24:58

标签: php magento magento-1.8

使用Magento 1.8.1,在结帐页面上,我尝试在代码中将产品添加到购物车。以下是我使用的代码:

    $totals = Mage::getSingleton('checkout/cart')->getQuote()->getTotals();
    $subtotal = $totals["subtotal"]->getValue();
    $free_samples_prod_id = 1285;
    if ( $subtotal >= 50 ) {
        $this->addProduct($free_samples_prod_id, 1);
    }
    else{
        $cartHelper = Mage::helper('checkout/cart');
        $items = $cartHelper->getCart()->getItems();
        foreach ($items as $item) {
            if ($item->getProduct()->getId() == $free_samples_prod_id) {
                $itemId = $item->getItemId();
                $cartHelper->getCart()->removeItem($itemId)->save();
                break;
            }
        }
    }

代码位于:public function init()

下的 app \ code \ core \ Mage \ Checkout \ Model \ Cart.php

产品确实成功添加,但是,每当有人访问他们的购物车页面时,数量会增加一个。如何修改该代码,使数量始终为1?

谢谢

1 个答案:

答案 0 :(得分:1)

Axel提出了一个非常好的观点,但要回答您的直接问题,为什么不在添加产品之前测试产品的存在

$cartHelper = Mage::helper('checkout/cart');
$items = $cartHelper->getCart()->getItems();
$subtotal = $totals["subtotal"]->getValue();
$free_samples_prod_id = 1285;

if ( $subtotal >= 50 ) {

    $alreadyAdded = false;
       foreach ($items as $item) {
           if($item->getId() == $free_samples_prod_id) { $alreadyAdded = true; break; }
       }
    if(!$alreadyAdded) { $this->addProduct($free_samples_prod_id, 1); }
}