2012-09-22 138 views
4

當在Magento中以編程方式將捆綁產品添加到購物車時,我似乎無法在產品選項數組中找到「捆綁選項」字段的任何文檔。所以我不能確定如何正確地做到這一點。Magento用'bundle_option'添加捆綁產品到購物車?

但是,這是我的嘗試:

$json_obj = json_decode($json_string, true); 

//define cart 
$cart = Mage::getSingleton('checkout/cart'); 
$bundle = array(); 
$bundle_qty = array(); 

for ($i=0; $i<count($json_obj['basket']['products']); $i++) { 
    $product_id = int($json_obj['basket']['products'][$i]['id']); 

    #add individual products to cart 
    #$product = new Mage_Catalog_Model_Product(); 
    #$product->load($product_id); 
    #$params = array('product'=>$product_id,'qty'=>1); 
    #if ($product->getName()) $cart->addProduct($product, $params); 

    #add products to bundle 
    $bundle[$i] = $product_id; 
    if (isset($bundle_qty[$product_id])) $bundle_qty[$product_id] += (int)1; 
    else $bundle_qty[$product_id] = (int)1; 

} 

#add to bundled product to cart 
$product = new Mage_Catalog_Model_Product(); 
$product->load(833); #833 = test bundle 
$cart->addProduct($product, array('product'=>833, 
            'qty'=>min(1,int($json_obj['basket']['quantity'])), 
            'bundle_option'=>$bundle, 
            'bundle_option_qty'=>$bundle_qty)); 
$cart->save(); 
Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 
$message = $this->__('Notice: %s item(s) were successfully added to your shopping cart.', $i); 
Mage::getSingleton('checkout/session')->addSuccess($message); 

}

所以註釋掉的代碼添加產品逐個其正常工作。現在我試圖將產品添加到「Test Bundle」產品中。

我現在做的循環是什麼編制的「bundle_option」和「bundle_option_qty」字段的數組。一旦循環完成,我將捆綁產品(ID:833)添加到帶有捆綁項目的options數組的購物車。

結果是沒有東西被添加到購物車。我也玩過代碼,但沒有成功。

任何人都可以看到我要出錯的地方,或者如果你能指向我的產品選項參數的doc /教程,詳細說明bundle_option數組(索引是什麼,以及值是什麼) ?

回答

3

我不得不從前端檢查發送到購物車網址的POST變量來找出這一個。

這些是張貼一個束中的變量:

bundle_option[1][] 17 
bundle_option[1][] 19 
bundle_option_qty[1][17] 1 
bundle_option_qty[1][19] 1 
product 833 
qty 2 
related_product 

從我想通了,bundle_option[1]稱爲選項束中的1。 我還計算了指數bundle_option[1][0]=17bundle_option[1][1]=19的值--17和19指的是selection_id

分析前端的表單顯示了我的selection_id列表。我發現一旦在Admin> Manage Products中修改了包的選擇標識會發生變化,所以我使用查找來獲取選擇標識,而不是對它們進行硬編碼。

我最終得到的代碼是:

$json_string = isset($_POST["json"])? $_POST["json"] : null; 
if (!is_null($json_string)) { 

    $json_obj = json_decode($json_string, true); 

    #define cart 
    $cart = Mage::getSingleton('checkout/cart'); 

    #look-up bundle selection ids 
    $bundled_product = new Mage_Catalog_Model_Product(); 
    $bundled_product->load(833); #833 = test bundle 
    $selectionCollection = $bundled_product->getTypeInstance(true)->getSelectionsCollection(
     $bundled_product->getTypeInstance(true)->getOptionsIds($bundled_product), $bundled_product 
); 
    $bundled_items = array(); 
    foreach ($selectionCollection as $option) { 
    $bundled_items[$option->product_id] = $option->selection_id; 
    } 

    #get bundle items, quantities 
    $bundle = array(); 
    $bundle_qty = array(); 
    for ($i=0; $i<count($json_obj['basket']['products']); $i++) { 
    $product_id = (int)$json_obj['basket']['products'][$i]['id']; 
    $selection_id = $bundled_items[$product_id]; 
    if(!in_array($selection_id,$bundle)) array_push($bundle,$selection_id); 
    if (isset($bundle_qty[$selection_id])) $bundle_qty[$selection_id] += (int)1; 
    else $bundle_qty[$selection_id] = (int)1; 
    } 

    #add to bundled product to cart 
    $options = array('product'=>833, 
        'related_product'=>null, 
        'bundle_option'=>array(1=>$bundle), 
        'bundle_option_qty'=>array(1=>$bundle_qty), 
        'qty'=>(int)$json_obj['basket']['quantity'] 
       ); 
    $cart->addProduct($bundled_product, $options); 
    $cart->save(); 
    Mage::getSingleton('checkout/session')->setCartWasUpdated(true); 
    $message = $this->__('Notice: %s item(s) were successfully added to your shopping cart.', $i); 
    Mage::getSingleton('checkout/session')->addSuccess($message); 
} 

我希望這可以節省很多人的時間!

編輯

仍在試圖解決爲什麼bundle_option_qty沒有設定數量(全部項目數量:1加入到包產品)

編輯2

原來內置前端包加入購物車功能無法將多個物品添加到購物車中! Looking into the issue I found that the bundle-quantity feature was an extension called Kabel BundlePlus,它可能沒有被以前的開發者正確安裝,所以我再次下載並重新安裝插件,現在the bundle_option_qty正在工作在前端和我的插件!

相關問題