将多个产品添加到购物车-Magento

| 我尝试使用该http://sourceforge.net/projects/massaddtocart/ 这正是我想要的,但是它显示此错误:
Fatal error: Call to a member function setProduct() on a non-object in [...]/app/code/local/BD83/MassAddToCart/Helper/Data.php on line 20
我想一键添加数量不同的多个简单商品到购物车。 Magento中不存在此选项。 任何帮助表示赞赏。 好吧,乔纳森,那就是:
public function getButtonHtml(Mage_Catalog_Model_Product $product)
{
    if ($product->getId() && !$product->getIsComposite()) {
        $qtyBlock = Mage::app()->getLayout()
            ->getBlock(\'bd83.massaddtocart.catalog.product.list.item.button\');
        $qtyBlock->setProduct($product) // **LINE 20**
            ->setProductId($product->getId())
            ->setMinQty(Mage::getStoreConfig(self::XML_PATH_MIN_QTY))
            ->setDefaultQty(Mage::getStoreConfig(self::XML_PATH_DEFAULT_QTY))
            ->setMaxQty(Mage::getStoreConfig(self::XML_PATH_MAX_QTY));
        return $qtyBlock->toHtml();
    }
    return \'\';
}
我想得到的一些例子: http://www.dickblick.com/products/winsor-and-newton-artists-acrylics/ http://www.polymexint.com/nouvelle-montana-black-blk-400ml.html @Oliver:检查您的回应     
已邀请:
        仍在搜索中?找到这个: http://www.magentocommerce.com/boards/viewthread/9797 似乎可以在当前版本中使用,尽管我尚未对其进行测试。如果您解决了它,至少将来的搜索者会知道在哪里可以找到它! /***编辑****/ 好吧,要“不被认为是糟糕的答案”,这就是您应该如何实施解决方案的方法。这些代码都不是我的工作,对Uni-Man,Nexus Rex和Magento Forum的员工也没有帮助:) 该代码有据可查。它将在名称为“模块”的名称为“公司”的名称空间中创建一个有价值的Magento扩展。 首先,在app / code / local / Company / Module / helper / Data.php中实现帮助程序:
    <?php
    class Company_Module_Helper_Multiple 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 / design / base / default / templates / catalog / list.phtml复制到app / design / default / default / templates / catalog / list.phtml。这样可以确保,一旦不再需要该扩展名,您/您的客户就可以返回普通列表视图而无需编码。 修改新的list.phtml文件,如下所示: 后
<?php echo $this->getToolbarHtml(); ?>
<form action=\"<?php echo $this->helper( \'Module/multiple\' )->getAddToCartUrl() ?>\" method=\"post\" id=\"product_addtocart_form\">
<button class=\"form-button\" onclick=\"productAddToCartForm.submit()\"><span><?php echo $this->__(\'Add Items to Cart\') ?></span></button> 
(这将打开表格;以下所有项目将添加数量输入框,因此您可以使用一个单一按钮将所有项目放入购物车。这也放在此处。) 向下滚动,您将找到通常生成“添加到购物车”按钮的区域:
<?php if($_product->isSaleable()): ?> 
将if-block的内容替换为:
<fieldset class=\"add-to-cart-box\">
  <input type=\"hidden\" name=\"products[]\" value=\"<?php echo $_product->getId() ?>\" />
  <legend><?php echo $this->__(\'Add Items to Cart\') ?></legend>
  <span class=\"qty-box\"><label for=\"qty<?php echo $_product->getId() ?>\"><?php echo $this->__(\'Qty\') ?>:</label>
  <input name=\"qty<?php echo $_product->getId() ?>\" type=\"text\" class=\"input-text qty\" id=\"qty<?php echo $_product->getId() ?>\" maxlength=\"12\" value=\"\" /></span>
</fieldset>
这是数量的输入字段。 要关闭-tag,请在之后插入
<?php echo $this->getToolbarHtml() ?>
在底部:
<button class=\"form-button\" onclick=\"productAddToCartForm.submit()\"><span><?php echo $this->__(\'Add Items to Cart\') ?></span></button>
</form> 
您在这里所做的是: -生成第二个“添加到购物车”按钮,与顶部的按钮相同 -关闭表格 将商品添加到购物车后,通常Magento会调用Checkout_CartController。我们必须修改此一项,以便不但要添加一项,而且还要以应有的数量向购物车中添加所有项目。 因此,添加文件app / code / local / Company / Module / controllers / Checkout / CartController.php并填写以下内容:
> require_once \'Mage/Checkout/controllers/CartController.php\';
> 
> class Company_Module_Checkout_CartController extends
> Mage_Checkout_CartController {

>     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();
>                 $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,
>                     \'additional_ids\' => array(),
>                     \'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();
>     } }
我们用我们自己的类覆盖了现有的Mage Core类,从而为此目的使用了我们的控制器。 您还必须像往常一样在app / code / local / Company / Module / etc / config.xml中添加模块的config.xml:
 <?xml version=\"1.0\"?>
    <config>
        <modules>
            <Company_Module>
                <version>0.1.0</version>
            </Company_Module>
        </modules>
        <global>
            <rewrite>
                <company_module_checkout_cart>
                    <from><![CDATA[#^/checkout/cart/addmultiple/.*$#]]></from>
                    <to>/module/checkout_cart/addmultiple/</to>
                </company_module_checkout_cart> 
            </rewrite>
            <helpers>
                <Module>
                    <class>Company_Module_Helper</class>
                </Module>
            </helpers>
        </global>
        <frontend>
            <routers>
                <company_module>
                    <use>standard</use>
                    <args>
                        <module>Company_Module</module>
                        <frontName>module</frontName>
                    </args>
                </company_module>
            </routers>
        </frontend>
    </config> 
这是做什么的: -将对购物车控制器的呼叫替换为对自己的多重添加控制器的呼叫 -注册助手 -将路由器应用于前端 请告诉我是否需要更多文档。     
        使用jQuery / Javascript有一种更简单的方法。页面上的所有产品均在
<li>
标签中。这些标签具有称为“ 12”的属性,其中包含每个产品的数字ID。另外,我确定您知道可以使用诸如“ 13”之类的URL将多个产品添加到购物车中(用您自己的产品ID代替数字1,2和3。) 知道了这一点,如果您有一个产品页面,我们可以使用jQuery / JavaScript生成一个URL,该URL获取页面上每个产品的所有产品ID,并将它们相应地放置在上述URL中。 为此,首先,请确保您已将jQuery添加到您的站点中:
<script src=\"http://code.jquery.com/jquery-1.10.0.min.js\"></script>
<script src=\"http://code.jquery.com/jquery-migrate-1.2.1.min.js\"></script>
现在,添加以下脚本-有一些注释可让您知道每个变量和函数的功能:
<script>
$(document).ready(function() {
//Function to get all product ID\'s, & create a URL that will add all the items
function generateUrl() {
    //the variable \'firstItem\' will find the first Product ID in an li tag
    var firstItem = $(\"li\").first().attr(\"data-product-id\");
    //the variable \'otherItem\' will earch all other li\'s, and grab their product ID\'s
    var otherItem = $(\'li\').nextAll().map(function() {return $(this).attr(\'data-product-id\');}).get();
    //the newURL creates the URL that adds the products to the cart; replace the site URL with your own.
    var newUrl = \'http://shop.yoursite.com/checkout/cart/add?product=\' + firstItem + \'&related_product=\' + otherItem;
    //this seeks a link with the ID of \"productlink\", then will add the URL generated from newURL to the href tag
    $(\'#productlink\').attr(\"href\" , newUrl);
}
//start function!
generateUrl();

});

</script>
现在,创建一个ID为productlink的链接。
<a href=\"\" id=\"productlink\">Add All Items To Cart</a>
而已!     

要回复问题请先登录注册