【问题标题】:Add multiple products to cart in magento 1.7.0.2在 magento 1.7.0.2 中将多个产品添加到购物车
【发布时间】:2013-06-06 02:01:36
【问题描述】:

我在magento 1.7.0.2中添加了新模块。我已经按照文章做了。 http://www.magentocommerce.com/boards/viewthread/9797/P30/。 当我同时添加三个产品时,只有一个产品可以显示正确的价格,其他是 $0.00 并且 Subiotal 是错误的。然后我点击“我的购物车”页面顶部,“我的购物车”中正确的价格在侧边栏上。

app/code/local/Perpetual/MultiAdd/controllers/Checkout/CartController.php

require_once('Mage/Checkout/controllers/CartController.php');
class Perpetual_MultiAdd_Checkout_CartController extends Mage_Checkout_CartController
{
     /**
     * Adding multiple products to shopping cart action
     * based on Mage_Checkout_CartController::addAction()
     * see also http://www.magentocommerce.com/boards/viewthread/8610/
     * and http://www.magentocommerce.com/wiki/how_to_overload_a_controller
     */
    public function addmultipleAction()
    {
        $productIds = $this->getRequest()->getParam('products');
        if (!is_array($productIds)) {
            $this->_goBack();
            return;
        }
        foreach( $productIds as $productId) {
            try {
                $qty = $this->getRequest()->getParam('qty' . $productId, 0);
                if ($qty <= 0) continue; // nothing to add
                $cart = $this->_getCart();
                $cart->init();
                //$cart = Mage::getModel('checkout/cart')->init();
                $product = Mage::getModel('catalog/product')
                    ->setStoreId(Mage::app()->getStore()->getId())
                    ->load($productId)
                    ->setConfiguredAttributes($this->getRequest()->getParam('super_attribute'))
                    ->setGroupedProducts($this->getRequest()->getParam('super_group', array()));
                $eventArgs = array(
                    'product' => $product,
                    'qty' => $qty,
                    'request' => $this->getRequest(),
                    'response' => $this->getResponse(),
                );
                Mage::dispatchEvent('checkout_cart_before_add', $eventArgs);

                $cart->addProduct($product, $qty);
                Mage::dispatchEvent('checkout_cart_after_add', $eventArgs);
                $cart->save();
                Mage::dispatchEvent('checkout_cart_add_product', array('product'=>$product));
                $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();
    }
}

我的模板:

...
<form action="<?php echo $this->helper('multiadd/cart')->getAddToCartUrl() ?>" method="post" id="productAddToCartForm">
    ...
    <label for="qty<?php echo $_product->getId()?>"><?php echo $this->__('Qty') ?>:</label>
    <input type="text" name="qty<?php echo $_product->getId()?>" id="qty<?php echo $_product->getId()?>" maxlength="12" value="<?php echo ($this->getMinimalQty($_product)?$this->getMinimalQty($_product):0) ?>" class="input-text qty" />
    ...
    <button class="button btn-cart" type="button" onclick="productAddToCartForm.submit()"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button>
</form>
...

app\code\local\Perpetual\MultiAdd\etc\config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Perpetual_MultiAdd>
            <version>0.1.0</version>
        </Perpetual_MultiAdd>
    </modules>
    <global>
        <rewrite>
            <perpetual_multiadd_checkout_cart>
                <from><![CDATA[#^/checkout/cart/addmultiple/.*$#]]></from>
                <to>/multiadd/checkout_cart/addmultiple/</to>
            </perpetual_multiadd_checkout_cart> 
        </rewrite>
        <helpers>
            <multiadd>
                <class>Perpetual_MultiAdd_Helper</class>
            </multiadd>
        </helpers>
    </global>
    <frontend>
        <routers>
            <perpetual_multiadd>
                <use>standard</use>
                <args>
                    <module>Perpetual_MultiAdd</module>
                    <frontName>multiadd</frontName>
                </args>
            </perpetual_multiadd>
        </routers>
    </frontend>
</config> 

app\code\local\Perpetual\MultiAdd\Helper\Cart.php

<?php
class Perpetual_MultiAdd_Helper_Cart extends Mage_Core_Helper_Url
{
    /**
     * Return url to add multiple items to the cart
     * @return  url
     */
    public function getAddToCartUrl()
    {
        if ($currentCategory = Mage::registry('current_category')) {
            $continueShoppingUrl = $currentCategory->getUrl();
        } else {
            $continueShoppingUrl = $this->_getUrl('*/*/*', array('_current'=>true));
        }

        $params = array(
            Mage_Core_Controller_Front_Action::PARAM_NAME_URL_ENCODED => Mage::helper('core')->urlEncode($continueShoppingUrl)
        );

        if ($this->_getRequest()->getModuleName() == 'checkout'
            && $this->_getRequest()->getControllerName() == 'cart') {
            $params['in_cart'] = 1;
        }
        return $this->_getUrl('checkout/cart/addmultiple', $params);
    }
}
?>

app\etc\modules\Perpetual_MultiAdd.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Perpetual_MultiAdd>
            <active>true</active>
            <codePool>local</codePool>
            <version>0.1.0</version>
        </Perpetual_MultiAdd>
    </modules>
</config>

如何修复侧边栏“我的购物车”中的错误价格? 对不起,我的英语不是我的母语。

【问题讨论】:

    标签: magento magento-1.7


    【解决方案1】:

    $cart = $this-&gt;_getCart();$cart-&gt;save(); 放在foreach 之外。

    require_once('Mage/Checkout/controllers/CartController.php');
    class Perpetual_MultiAdd_Checkout_CartController extends Mage_Checkout_CartController
    {
         /**
         * Adding multiple products to shopping cart action
         * based on Mage_Checkout_CartController::addAction()
         * see also http://www.magentocommerce.com/boards/viewthread/8610/
         * and http://www.magentocommerce.com/wiki/how_to_overload_a_controller
         */
        public function addmultipleAction()
        {
            $productIds = $this->getRequest()->getParam('products');
            if (!is_array($productIds)) {
                $this->_goBack();
                return;
            }
    
    
            $cart = $this->_getCart();
    
            foreach( $productIds as $productId) {
    
                try {
                    $qty = $this->getRequest()->getParam('qty' . $productId, 0);
                    if ($qty <= 0) continue; // nothing to add
                    //$cart = $this->_getCart();
                    $product = Mage::getModel('catalog/product')
                        ->setStoreId(Mage::app()->getStore()->getId())
                        ->load($productId)
                        ->setConfiguredAttributes($this->getRequest()->getParam('super_attribute'))
                        ->setGroupedProducts($this->getRequest()->getParam('super_group', array()));
                    $eventArgs = array(
                        'product' => $product,
                        'qty' => $qty,
                        'request' => $this->getRequest(),
                        'response' => $this->getResponse(),
                    );
                    Mage::dispatchEvent('checkout_cart_before_add', $eventArgs);
    
                    //$cart = Mage::getModel('checkout/cart')->init();
    
                    $cart->addProduct($product, $qty);
                    Mage::dispatchEvent('checkout_cart_after_add', $eventArgs);
                    //$cart->save();
                    Mage::dispatchEvent('checkout_cart_add_product', array('product'=>$product));
                    $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'));
                }
    
            }
            $cart->save();
    
            $this->_goBack();
        }
    }
    

    【讨论】:

    • 如何在 magento2 中实现同样的效果?
    【解决方案2】:

    找到了!保存购物车后将其放在任何地方。它将重置您的购物车并重新加载您的报价以重新计算所有产品的价格。

    Mage::unregister('_singleton/checkout/cart');
    Mage::unregister('_singleton/checkout/session');
    $cart = $this->_getCart();
    $this->_getQuote();
    if ($cart->getQuote()->getItemsCount()) {
        $cart->init();
        $cart->save();
    }
    

    【讨论】:

    • 这仍然有效,非常有帮助。非常感谢。
    【解决方案3】:

    也许这个会有所帮助:

    http://deepakbhatta.com/magento-add-multiple-items-to-cart/

    概述是:

     $cart = Mage::helper('checkout/cart')->getCart();
            $ms="";
            foreach($validProducts as $sku => $qty) {
                $params = array('qty' => $qty);
                $id = Mage::getModel('catalog/product')->getIdBySku($sku);
                $product = Mage::getModel('catalog/product')->load($id);;
                $cart->addProduct($product, $params);
                $msg .= $product->getName(). " is successfully added into cart<br>";
            }
             $cart->save();
    

    【讨论】:

      【解决方案4】:

      最近,我们为 Magento 推出了免费的一流扩展程序 - 将多个产品添加到购物车,以改善客户的在线购物体验。

      此扩展程序允许用户添加多个产品并将所有产品添加到购物车中,只需单击一下即可。更重要的是,它将允许客户从类别页面本身输入数量。

      http://www.magentocommerce.com/magento-connect/add-multiple-products-to-cart.html

      这正是你所需要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2017-05-18
        • 2012-01-06
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多