magento|简单产品的多options同时加购

新开发一个批发的站,同一个产品往往存在多种规格,为了方便用户,计划在详情页对产品进行多个option的同时加购,具体效果如下:

具体关键点在两个位置,一是加购的时候执行两次add的动作,需要两次add之后在执行save。另外一个关键点在于如果已经加购过一次,如何判断购物车中存在这个规格的产品。一次提交一个产品的时候不影响,但是一次提交两个及以上产品的时候就会出现匹配混乱,需要重新校正,存在的合并,不存在的重建。

app\code\local\Glasses\Common\controllers\CartController.php集成加购控制器,自定义方法:

 public function addmultipleAction()
    {
        $options = $this->getRequest()->getParam('options');
        if (!is_array($options)) {
            $this->_goBack();
            return;
        }

        if (!$this->_validateFormKey()) {
            $this->_goBack();
            return;
        }
        $params = $this->getRequest()->getParams();
        $final_params=array();
        foreach ($options as $k=>$option){
            $final_params[$k]['product']=$params['product'];
            $final_params[$k]['options'][key($option)]=current($option);
            foreach ($params['qty'] as $key=>$v){
                if(key($v)==current($option)){
                    $final_params[$k]['qty']=current($v);
                }

            }
            foreach ($params['true_sku'] as $key=>$v){
                if(key($v)==current($option)){
                    $final_params[$k]['sku']=current($v);
                }

            }
        }

        //dump($final_params);exit;
        $product = Mage::getModel('catalog/product')->load($params['product']);
        if (!$product) {
            $this->_goBack();
            return;
        }

        $cart = Mage::getModel('checkout/cart')->init();
        try {

            foreach( $final_params as $param) {
                $qty = $param['qty'];
                if ($qty <= 0) continue; // nothing to add
                Mage::getSingleton('core/session')->setTwoCart($param['sku']);
                $cart->addProduct($product, $param);
            }
            /* keep this outside the loop */
            $cart->save();

            Mage::dispatchEvent('checkout_cart_add_product_complete',
                array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse())
            );
            $message = $this->__('%s was successfully added to your shopping cart.', $product->getName());
            Mage::getSingleton('checkout/session')->addSuccess($message);
        }   catch (Mage_Core_Exception $e) {

            if (Mage::getSingleton('checkout/session')->getUseNotice(true)) {
                Mage::getSingleton('checkout/session')->addNotice($product->getName() . ': ' . $e->getMessage());
            }
            else {
                Mage::getSingleton('checkout/session')->addError($product->getName() . ': ' . $e->getMessage());
            }
        }
        catch (Exception $e) {
            Mage::getSingleton('checkout/session')->addException($e, $this->__('Can not add item to shopping cart'));
        }

        $this->_goBack();
    }

重写app\code\core\Mage\Sales\Model\Quote.php文件,在local下面,其中修改getItemByProduct()方法:

    public function getItemByProduct($product)
    {
        //by_zx_2019
        $two_sku=Mage::getSingleton('core/session')->getTwoCart();
        Mage::getSingleton('core/session')->unsTwoCart();
        foreach ($this->getAllItems() as $item) {
            $sku=$item->getData('sku');
            if($sku==$two_sku){
                return $item;
            }
        }
        return false;
        //by_zx_2019

    }

核心关键点就在于匹配判断规则,是否存在并新建的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值