2015-06-10 3 views
0

У меня есть цикл для создания программных программных продуктов. Создание новых пакетов отлично работает, но если у меня есть существующий пакет и вы пытаетесь добавить/удалить опции, это не сработает.Создание продуктов пучка в петле

Если я запускаю свой код импорта в первый раз, пакеты создаются. Во второй раз все параметры будут удалены, и только последний пакет массива имеет свои параметры.

$ids = [8663,8665,8664]; 
foreach ($ids as $id) { 
    createBundle($id); 
} 

function createBundle($id) 
{ 
    Mage::unregister('product'); 

    try { 
     $bundleProduct = Mage::getModel('catalog/product')->load($id); 
     Mage::register('product', $bundleProduct); 

     // try to get already assigned options and remove them all 
     $selectionCollection = $bundleProduct->getTypeInstance(true)->getSelectionsCollection(
      $bundleProduct->getTypeInstance(true)->getOptionsIds($bundleProduct), $bundleProduct 
     ); 

     // remove assigned options 
     // works fine 
     foreach ($selectionCollection as $option) 
     { 
      $optionModel = Mage::getModel('bundle/option'); 
      $optionModel->setId($option->option_id); 
      $optionModel->delete(); 
     } 

     $bundleOptions = array(
      '0' => array(//option id (0, 1, 2, etc) 
       'title' => 'item01', //option title 
       'option_id' => '', 
       'delete' => '', 
       'type' => 'select', //option type 
       'required' => '1', //is option required 
       'position' => '0' //option position 
      ), 
      '1' => array(
       'title' => 'item02', 
       'option_id' => '', 
       'delete' => '', 
       'type' => 'multi', 
       'required' => '1', 
       'position' => '0' 
      ) 
     ); 

     $bundleSelections = array(); 
     $bundleSelections = array(
      '0' => array(//option ID 
       '0' => array(//selection ID of the option (first product under this option (option ID) would have ID of 0, second an ID of 1, etc) 
        'product_id' => 8631, //id of a product in selection 
        'delete' => '', 
        'selection_price_value' => '0', 
        'selection_price_type' => 0, 
        'selection_qty' => 10, 
        'selection_can_change_qty' => 0, 
        'position' => 0, 
        'is_default' => 1 
       ) 
      ), 
      '1' => array(//option ID 
       '0' => array(
        'product_id' => 8630, 
        'delete' => '', 
        'selection_price_value' => '0', 
        'selection_price_type' => 0, 
        'selection_qty' => 1, 
        'selection_can_change_qty' => 0, 
        'position' => 0, 
        'is_default' => 1 
       ) 
      ) 
     ); 

     // flags for saving custom options/selections 
     $bundleProduct->setCanSaveCustomOptions(true); 
     $bundleProduct->setCanSaveBundleSelections(true); 
     $bundleProduct->setAffectBundleProductSelections(true); 

     // setting the bundle options and selection data 
     $bundleProduct->setBundleOptionsData($bundleOptions); 
     $bundleProduct->setBundleSelectionsData($bundleSelections); 

     $bundleProduct->save(); 
     $bundleProduct->setData(array()); 
     return $bundleProduct->getId(); 

    } catch (Exception $e) { 
     Mage::log($e->getMessage()); 
     echo $e->getMessage(); 
    } 
} 

Итак, как я могу получить эту работу? Если я удалю часть, где удаляются параметры, то каждый раз, когда выполняется код, появляются новые пустые параметры (что неверно).

Обновление: Я узнал, что пучки создаются/обновляются правильно, если я запускаю скрипт трижды, каждый с другим идентификатором продукта. Таким образом, проблема должна заключаться в выполнении цикла в одном запросе.

ответ

0

Наконец-то я узнал сам. Эта часть опубликованного кода:

// try to get already assigned options and remove them all 
    $selectionCollection = $bundleProduct->getTypeInstance(true)->getSelectionsCollection(
     $bundleProduct->getTypeInstance(true)->getOptionsIds($bundleProduct), $bundleProduct 
    ); 

    // remove assigned options 
    // works fine 
    foreach ($selectionCollection as $option) 
    { 
     $optionModel = Mage::getModel('bundle/option'); 
     $optionModel->setId($option->option_id); 
     $optionModel->delete(); 
    } 

, кажется, удаляет только часть выбора вариантов. Чтобы удалить все варианты, мне пришлось сделать это следующим образом:

// try to get already assigned options and remove them all 
    $optionCollection = $_product->getTypeInstance(true)->getOptionsCollection($_product); 

    // remove assigned options 
    foreach ($optionCollection as $option) 
    { 
     $option->delete(); 
    } 
Смежные вопросы