Программно добавляйте продукты пакета в Magento, используя артикул/идентификатор простых товаров
У меня есть несколько простых продуктов каталога в Magento, поэтому у меня есть их артикулы и идентификаторы. Теперь я хочу создать комплектный продукт, используя элементы массива "bundle_options" и "bundle_selections" элементов пакета, которые используются администратором Magento в своем классе Observer.
Также в классе Observer есть вызовы методов двух функций "setBundleOptionsData()
" & "setBundleSelectionsData()
", для которого я не могу найти никакого определения функции.
Пожалуйста, любой профессиональный пост здесь, потому что я нужен какой-то правильный способ сделать это. Если потребуется, переопределение модулей или использование событий, я сделаю это, но мне нужна действительно профессиональная помощь. Заранее спасибо.
Редактировать:-
Что касается двух методов, упомянутых выше "setBundleOptionsData()
" & "setBundleSelectionsData()
", в чем я почти уверен, так это в том, что они используют какие-то магические методы PHP, но я не знаю, где написана основная логика этих магических методов?
Пожалуйста, кто-нибудь, дайте какой-нибудь правильный ответ. Любая помощь очень важна оцененный.
3 answers
Мне было трудно с этим, но я обнаружил, что это помогло мне преодолеть трудности:
$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);
Был ключом
РЕДАКТИРОВАТЬ:: Также похоже, что есть небольшая особенность при попытке добавить несколько опций/вариантов выбора. 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
)
))
$MyOptions[0] = array (
'title' => 'My Bad','default_title' => 'My Bad',
'delete' => '',
'type' => 'radio',
'required' => 0,
'position' => 0
);
Или
$optionmodel =Маг::getModel('комплект/опция') ->Добавление выбора ('op111') ->Настройка ('op111') ->setdefaulttitle('op111')->Установить значение по умолчанию ('op111') ->setparentid ($идентификатор продукта) ->setstoreid($продукт ->getstoreid()); $optionmodel->сохранить();
Для этого я не использую никаких веб-сервисов. Я просто использовал следующие методы, предназначенные специально для Комплектных продуктов, а именно: -
- setbundleoptionsdata()
- setbundleselectionsdata()
- setcansavebundleselections(истинно)
Для первого метода подробные сведения о параметрах пакета предоставляются методу в качестве параметра в виде массива. Аналогично, для второго метода "setbundleselectionsdata()" мы предоставляем подробные сведения о выборе пакета для этого метода в качестве параметра в виде массива.
Это основная логика в том, что происходит при добавлении любого продукта в комплекте в Magento. Надеюсь, это поможет любым новичкам!!!
Пожалуйста, проверьте эту ссылку для получения более подробной информации о правильном создании пакета продуктов.