2013-10-21 131 views
0

我想以編程方式從捆綁產品中刪除所有選項,我只知道該產品的SKU。Magento從捆綁產品中刪除選項

$bundled = Mage::getModel('catalog/product')->loadByAttribute('sku',THISISMYSKU); 

$selectionCollection = $bundled->getTypeInstance(true)->getSelectionsCollection(
      $bundled->getTypeInstance(true)->getOptionsIds($bundled), $bundled); 
      foreach($selectionCollection as $option) 
      { 

       $sku = $option->getSku(); 
       if($sku != "") 
       { 
        $optionModel = Mage::getModel('bundle/option'); 
        $optionModel->setId($option->option_id); 
        $optionModel->delete(); 
        echo 'deleted: '.$option->getName()." optionID(".$option->option_id.")"; 
       }; 

但是,如果我在圈有它,不能正常工作,刪除其他產品的選擇。

回答

2

試試這個

$productCollection = Mage::getModel('catalog/product')->getCollection() 
        ->addAttributeToFilter('attribute_set_id', 4) 
        ->addAttributeToFilter('sku', array('in' => array('my-sku1', 'my-sku2', 'my-sku3'))) 
        ->addAttributeToFilter('type_id','bundle') 
        ->addFieldToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED); 

    foreach($productCollection as $product) 
    {    
     $bundled = Mage::getModel('catalog/product'); 
     $bundled->load($product->getId()); 

     $selectionCollection = $bundled->getTypeInstance(true)->getSelectionsCollection(
     $bundled->getTypeInstance(true)->getOptionsIds($bundled), $bundled); 

     foreach($selectionCollection as $option) 
     { 

      $optionModel = Mage::getModel('bundle/option'); 
      $optionModel->setId($option->option_id); 
      $optionModel->delete(); 

     } 

    } 

希望這有助於你

+0

作品完美! thx – Martin

+0

爲什麼你必須調用'$ bundled-> load($ product-> getId());'當你已經從'foreach'獲得'product'實例時。這兩個不一樣嗎? – KoviNET

+0

嗨,這不是刪除一個空的選項,但只有選項的選項,在這裏的方式來刪除emmpty選項嗎? – Martin