以编程方式将捆绑产品添加到购物车Magento


Programmatically add bundle products to cart Magento

我有一个bundle product,它包含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

您的代码中的一些修改应该是工作

$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())
);

希望这对你一定有用。

如果我还能帮到你,请告诉我。