【问题标题】:Programmatically add bundle products to cart Magento以编程方式将捆绑产品添加到购物车 Magento
【发布时间】:2014-08-25 00:45:29
【问题描述】:

所以我有一个捆绑产品,其中包含 6 个产品。我已经编写了将此捆绑包添加到购物车的代码,以编程方式将所有 6 个选项添加到捆绑包中……但我得到了这个 Call to a member function getPosition() on a non-object 错误……它发生在 shakeSelections 函数中,但它不会感觉是因为所有的对象和东西都需要去,比如$a$b需要是Mage_Catalog_Model_Product数据类型,它们只是getOption方法在其中不存在......有什么我做错了吗?

这是我的自定义控制器中的自定义 addAction:

public function addAction() {
        $prdId = $this->getRequest()->getParam('product');

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

        $_return = array('code' => 0, 'message' => 'Something went wrong...');

        if (!empty($prdId)) {
            $product = new Mage_Catalog_Model_Product();
            $product->load($prdId);

            if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) {
                $typeInstance = $product->getTypeInstance(true);
                $optionCollection = $typeInstance->getOptionsCollection($product);

                $selectionCollection = $typeInstance->getSelectionsCollection(
                    $typeInstance->getOptionsIds($product),
                    $product
                    );

                $this->_options = $optionCollection->appendSelections($selectionCollection, false,
                    Mage::helper('catalog/product')->getSkipSaleableCheck()
                    );

                $bundle_option = array();

                foreach ($this->_options as $key => $value) {
                    foreach ($value['selections'] as $selKey => $selection) {
                        $bundle_option[$selection->option_id][] = $selection['selection_id'];
                    }
                }

                $params = array(
                    'product' => $prdId,
                    'related_product' => '',
                    'bundle_option' => $bundle_option,
                    'qty' => '1',
                );

                $cart->addProduct($product, $params);
                $cart->save();
            }
        }
    }

url 基本上是:/forty/cart/add/product/11 其中 11 是捆绑产品的 id。

【问题讨论】:

    标签: php magento cart product


    【解决方案1】:

    这里应该对你的代码进行一些修改

    $cart = Mage::getModel('checkout/cart');
    $cart->init();
    
    $params = $this->getRequest()->getParams();
    $productId = $this->getRequest()->getParam('product');
    
    $product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($productId);
    
    if($product->getTypeId() == "bundle"){
    
        $bundled_items = array();
        $optionCollection = $product->getTypeInstance()->getOptionsCollection();
        $selectionCollection = $product->getTypeInstance()->getSelectionsCollection($product->getTypeInstance()->getOptionsIds());
        $options = $optionCollection->appendSelections($selectionCollection);
    
        foreach($options as $option) {
            $_selections = $option->getSelections();
    
            foreach($_selections as $selection) {
                $bundled_items[$option->getOptionId()][] = $selection->getSelectionId();
            }
        }
    
        $params = array('bundle_option' => $bundled_items,'qty' => 1,'product'=>$productId);
    }
    
    if (isset($params['qty'])) {
        $filter = new Zend_Filter_LocalizedToNormalized(
            array('locale' => Mage::app()->getLocale()->getLocaleCode())
            );
        $params['qty'] = $filter->filter($params['qty']);
    }
    
    $product = new Mage_Catalog_Model_Product();
    $product->load($productId);
    
    $cart->addProduct($product, $params);
    $cart->save();
    
    Mage::dispatchEvent('checkout_cart_add_product_complete',
        array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse())
    );
    

    希望这对你有用。

    如果我能帮助你更多,请告诉我。

    【讨论】:

    • 感谢您的回答,让我更进一步!我用你的代码和我的代码一起编辑了你的回复..这里和那里有几个错误..
    • @MaraisRossouw,我很高兴,我可以给你正确的方法。
    • 我试过这个,但我得到了Selected required options are not available
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多