0

OK、動作するモジュールがあります。モジュールでは、次のようないくつかのオプションを使用して複数の製品を追加します。

public function indexAction() { 
    $prod_count = $this->getRequest()->getParam('prod_count');
    $cart = Mage::getModel('checkout/cart');
    $cart->init(); 
    for($i = 1; $i <= $prod_count ;$i++){
        $prod_id = $this->getRequest()->getParam('prod_'.$i.'_id');
        $prod_count = $this->getRequest()->getParam('product_'.$i.'_count');
        $product = Mage::getModel('catalog/product')->load($prod_id);
        $options = array('options' => NULL);
        for($u = 1; $u <= $prod_count; $u++){
            $op_id= $this->getRequest()->getParam('option_id_'.$u.'_'.$i);
            $op_type_id = $this->getRequest()->getParam('option_type_id_'.$u.'_'.$i);
            $options['options'][] = array( $op_id => $op_type_id);
        }
        $copy = array();
        for($r = 0; $r < count($options['options']); $r++){
            array_push($copy,$options['options'][$r]);
            var_dump($copy);
        }
        echo $prod_id.'<br><br>';try {  
        $params = array(
                    'product' => $prod_id, // This would be $product->getId()
                    'qty' => 1,
                    'options' => $copy
                ); 
        $request = new Varien_Object();
        $request->setData($params);
        $cart->addProduct($product, $request); 
        Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
        $cart->save();  
        }catch (Exception $ex) {
            echo $ex->getMessage();
        }
    }       
    if ($this->getRequest()->isXmlHttpRequest()) {
        exit('1'); 
    } 
    $session= Mage::getSingleton('checkout/session');
    $this->_redirect('checkout/cart'); 
}

しかし、私が自分のサイトでこれを実行すると、オプションのない製品がストアに追加されるだけで、オプションを取得できるかどうかも確認しました. 理由を知っている人はいますか?

4

1 に答える 1

1

$copy変数のデータを確認する必要があると思います。パラメータの形式は次のとおりです。

Array
(
    [product] => 171     // product id
    [options] => Array
        (
            [4] => 1111  // <option_id> => <selected value>
            [3] => 7     // <option_id> => <selected value>
        )

    [qty] => 1
)

また、あなたは必要ありません

$request = new Varien_Object();
$request->setData($params);

次のように渡すだけ$paramsです:

$cart->addProduct($product, $params); 
于 2013-05-06T16:44:34.080 に答える