Программно добавлять Bundle Products в Magento, используя SKU / ID простых предметов - PullRequest
6 голосов
/ 24 июня 2010

У меня есть несколько простых каталожных товаров в Magento, поэтому у меня есть их SKU и идентификаторы. Теперь я хочу создать продукт Bundled, используя элементы массива «bundle_options» и «bundle_selections» элементов Bundle, которые используются администратором Magento в своем классе Observer.

Также в классе Observer есть вызовы методов двух функций "setBundleOptionsData()" и "setBundleSelectionsData()", для которых я не могу найти определение функции.

Пожалуйста, любой профессиональный пост здесь, потому что мне нужен какой-то правильный способ сделать это. Если понадобится, переопределить модули или использовать события, я это сделаю, но мне нужна действительно профессиональная помощь. Заранее спасибо.

Edit: -
Что касается двух упомянутых выше методов "setBundleOptionsData()" и "setBundleSelectionsData()", то я почти уверен, что они используют некие магические методы PHP, но я не знаю, где основная логика этих магических методов написаны?

Пожалуйста, кто-нибудь даст правильный ответ. Любая помощь с благодарностью.

Ответы [ 3 ]

4 голосов
/ 11 декабря 2010

Трудно было с этим, но обнаружил, что это заставило меня преодолеть горб:

                $items[] = array(
                'title' => 'test title',
                'option_id' => '',
                'delete' => '',
                'type' => 'radio',
                'required' => 1,
                'position' => 0);

            $selections = array();
            $selectionRawData[] = array(
                'selection_id' => '',
                'option_id' => '',
                'product_id' => '159',
                'delete' => '',
                'selection_price_value' => '10',
                'selection_price_type' => 0,
                'selection_qty' => 1,
                'selection_can_change_qty' => 0,
                'position' => 0);
            $selections[] = $selectionRawData;

            $productId = 182;
            $product    = Mage::getModel('catalog/product')
            ->setStoreId(0);
            if ($productId) {
                $product->load($productId);
            }
            Mage::register('product', $product);
            Mage::register('current_product', $product);
            $product->setCanSaveConfigurableAttributes(false);
            $product->setCanSaveCustomOptions(true);

            $product->setBundleOptionsData($items);
            $product->setBundleSelectionsData($selections);
            $product->setCanSaveCustomOptions(true);
            $product->setCanSaveBundleSelections(true);

            $product->save();

В частности,

                Mage::register('product', $product);
            Mage::register('current_product', $product);

был ключ

EDIT :: Также похоже, что есть некоторая особенность при попытке добавить несколько опций / выборов. SetBundleOptionsData принимает массив опций, т.е.

Array(
[1] => Array
    (
        [title] => Option 2
        [option_id] => 
        [delete] => 
        [type] => select
        [required] => 1
        [position] => 
    )

[0] => Array
    (
        [title] => Option 1
        [option_id] => 
        [delete] => 
        [type] => select
        [required] => 1
        [position] => 
    ))

И тогда выборки будут массивом массивов выборок, индексы которых соответствуют массиву параметров:

Array(
[1] => Array
    (
        [2] => Array
            (
                [selection_id] => 
                [option_id] => 
                [product_id] => 133
                [delete] => 
                [selection_price_value] => 0.00
                [selection_price_type] => 0
                [selection_qty] => 1
                [selection_can_change_qty] => 1
                [position] => 0
            )

        [3] => Array
            (
                [selection_id] => 
                [option_id] => 
                [product_id] => 132
                [delete] => 
                [selection_price_value] => 0.00
                [selection_price_type] => 0
                [selection_qty] => 1
                [selection_can_change_qty] => 1
                [position] => 0
            )

    )

[0] => Array
    (
        [0] => Array
            (
                [selection_id] => 
                [option_id] => 
                [product_id] => 206
                [delete] => 
                [selection_price_value] => 0.00
                [selection_price_type] => 0
                [selection_qty] => 1
                [selection_can_change_qty] => 1
                [position] => 0
            )

        [1] => Array
            (
                [selection_id] => 
                [option_id] => 
                [product_id] => 159
                [delete] => 
                [selection_price_value] => 0.00
                [selection_price_type] => 0
                [selection_qty] => 1
                [selection_can_change_qty] => 1
                [position] => 0
            )

    ))
2 голосов
/ 08 июля 2010
         $MyOptions[0] = array (
            'title' => 'My Bad','default_title' => 'My Bad',
            'delete' => '',
            'type' => 'radio',
            'required' => 0,
            'position' => 0
        );

или

$ optionModel = Mage :: getModel ('bundle / option') -> addSelection ('op111') -> setTitle ('op111') -> setDefaultTitle ('op111') -> setParentId ($ product_id) -> setStoreId ($ product-> getStoreId ());$ OptionModel-> Save ();

0 голосов
/ 28 июня 2010

Я не использую никаких веб-сервисов для этого.Я просто использовал следующие методы, предназначенные специально для комплектующих продуктов:1008 *

Для первого метода подробности параметров пакета предоставляются методу в виде параметра в виде массива.Точно так же для второго метода setBundleSelectionsData () мы предоставляем детали выбора пакетов для этого метода в качестве параметра в виде массива.

Это основная логика в том, что происходит длядобавление любого связанного продукта в Magento.Надеюсь, что это поможет любому новичку !!!


Пожалуйста, проверьте эту ссылку для более подробной информации о создании Bundle Product.

...