Magento 在将产品添加到购物车之前,在两个报价之间切换

Magento 在将产品添加到购物车之前,在两个报价之间切换,magento,magento-1.8,Magento,Magento 1.8,在将产品添加到报价中之前,我尝试在两个报价之间切换。为此,我在CartController中设置了覆盖addAction 首先,如果我有报价id,我将取消其设置 $session = Mage::getSingleton('checkout/session'); $quote_id = $session->getQuoteId(); //unset the current quote id IsActive(0) and save $quote = Mag

在将产品添加到报价中之前,我尝试在两个报价之间切换。为此,我在CartController中设置了覆盖addAction

首先,如果我有报价id,我将取消其设置

    $session = Mage::getSingleton('checkout/session');
    $quote_id = $session->getQuoteId();

    //unset the current quote id IsActive(0) and save
    $quote = Mage::getModel('sales/quote')->load($quote_id);
    $quote->setIsActive(0);
    $quote->save();

    Mage::getSingleton('checkout/session')->setQuoteId(null);
我在url中得到了一个额外的参数

    $params = $this->getRequest()->getParams();
    $free_home_trial = 0;
    if(isset($params['freehometrial'])){
        $free_home_trial = (int)$params['freehometrial'];
    }
通过这一点,我检查哪个报价加载

    if($free_home_trial){
        //check freetrial session Mage::getSingleton('checkout/session')->getFreeTrial()
        //if it is not null then load it
        $freetrial = Mage::getSingleton('core/session')->getFreeTrial();

        if(!is_null($freetrial)){
            $quote = Mage::getModel('sales/quote')->load($freetrial);
            $quote->setIsActive(1)->save();
            //$session->setData($quote);
            $session->setQuoteId($freetrial);
        }
     }else{
        //check for normal session
        //if it is not null then load it
        $normalsession = Mage::getSingleton('core/session')->getNormalCart();

        // var_dump($freetrial);die;
        if(!is_null($normalsession)){
            $quote = Mage::getModel('sales/quote')->load($normalsession);
            $quote->setIsActive(1)->save();
            $session->setQuoteId($normalsession);
        }
     }
$this->\u getSession()->setCartWasUpdated(true)之后如果会话不存在,我将保存这些会话

   //Create session free or normal based on the url parameter

        if($free_home_trial){
            if(is_null(Mage::getSingleton('core/session')->getFreeTrial())){
                Mage::getSingleton('core/session')->setFreeTrial(Mage::getSingleton('checkout/session')->getQuoteId());
            }
        }else{
            if(is_null(Mage::getSingleton('core/session')->getNormalCart())){
                Mage::getSingleton('core/session')->setNormalCart(Mage::getSingleton('checkout/session')->getQuoteId());
            }
        }
我不知道为什么免费试用版和普通版都使用相同的报价id,即使我在报价时将IsActive保存为0,在会话时将报价id设置为null

提前谢谢

更多澄清


我想要两个购物车,这就是为什么我想要两个引号并在它们之间切换。当客户单击第一次添加到购物车时,产品应添加到第一次购物车中;当客户单击第二次添加到购物车时,产品应添加到第二次购物车中。仅此而已,我已覆盖CartController的添加操作。

您可以使用合并功能切换购物车

$quoteA = Mage::getModel('sales/quote')->load('5');
$quoteB = Mage::getModel('sales/quote')->load('77');

$quoteB->merge($quoteA);

// Also?
$quoteB->collectTotals()->save();

Zend_Debug::dump($quoteB->getAllItems());

谢谢,但我想合并方法是用来合并两个引号的,但我不想这样做。我已经对我的问题进行了澄清。我想创建自定义rest api,用于将产品添加到购物车。可以告诉我该过程是什么吗?实际上,我正在报价中保存产品,它反映在magento管理面板中的报告中,但不会添加到特定用户。