0

我有一个控制器类,可用于将商品添加到购物车。我的方案是
我的产品有两个自定义选项。一个是儿童,另一个是婴儿。
我想将这两个中的一个自定义选项添加到我的购物车中。但是,我尝试了很多不同的方式。但是,我在结帐页面中看不到任何自定义选项。我怎样才能做到这一点。这是我的代码示例。

public function indexAction() {
    $products = explode(',', $this->getRequest()->getParam('products'));
    $cart = Mage::getModel('checkout/cart'); 
    $cart->init(); 
    foreach ($products as $product_id) { 
    if ($product_id == '') { 
continue; 
    } 
    $pModel = Mage::getModel('catalog/product')->load($product_id); 
    $param = array(
        'qty' => 2,
        'options' => array(
        'option_id' => $product_id,
        'default_title' => "Ticket for Child or Infant",
        'title' => "Child 2 to 12"
        )
    );  
    if ($pModel->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL) { 
       $cart->addProduct($pModel, new Varien_Object($param));
       Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
    }
    $cart->save();
    $this->_redirect('checkout/cart'); 
}  
4

1 回答 1

0

Soooo,您必须非常手动地将商品添加到购物车中。这是如何...

$cart = Mage::getSingleton("checkout/cart");

// $products_to_add is something I made up... 
// associative array of product_ids to an array of their custom options
foreach ($products_to_add as $product_id => $custom_options) {
  $product = Mage::getModel("catalog/product")->load($product_id);
  $options = new Varien_Object(array("options" => $custom_options,
                                     "qty" => 1));

  // some products may result in multiple products getting added to cart
  // I believe this pulls them all and sets the custom options accordingly
  $add_all = $product->getTypeInstance(true)
      ->prepareForCartAdvanced($options, $product, Mage_Catalog_Model_Product_Type_Abstract::PROCESS_MODE_FULL);

  foreach ($add_all as $add_me) {
    $item = Mage::getModel('sales/quote_item');
    $item->setStoreId(Mage::app()->getStore()->getId());
    $item->setOptions($add_me->getCustomOptions())
      ->setProduct($add_me);

    $item->setQty(1);
    $cart->getQuote()->addItem($item);
  }
}

// when done adding all the items, finally call save on the cart
$cart->save();
于 2013-07-23T05:12:28.170 回答