问题描述
我正在尝试获取捆绑选项数据.使用它: $product->getBundleOptionsData 我需要使用它,因为我试图以编程方式更改数据,并且我希望以与 ***** 中使用的方式一样接近的方式进行.
I'm trying to get bundle options data. using this : $product->getBundleOptionsData I need to use this, as I'm trying to change data programmatically and I would like to do it in a way that's as close as used in ***** .
但是,当我对上述函数的结果进行 var_dump 时,我得到 NULL 而在捆绑模型产品类型的管理端,我得到了正确的数据.
However, when I var_dump the result of the above function I get NULL while in ***** side in bundle model product type I get correctly the data.
当我在自己的文件中 var_dump $product 时,我得到的数据比在捆绑模型产品类型保存功能中 var_dump 时短得多.
When I var_dump $product in my own file I get much shorter data than when I var_dump in bundle model product type save function.
我需要做什么来加载产品的所有数据,以便我可以使用getBundleOptionsData.我查看了几个文件并用谷歌搜索,但找不到答案.
what do I need to do to load all data of the product, so I can use getBundleOptionsData. I looked in several files and googled, but can't find an answer.
推荐答案
最后,我成功地获取了捆绑选项数据,以便我可以对其进行操作.我在magento的模型包观察者类duplicateProduct函数中找到了主要代码:但是我需要添加option_id(小心不要忘记)
Finally I made it work to get bundle options data so I can manipulate it. I found the main code in magento's model bundle observer class duplicateProduct function: I needed however to add option_id (careful not to forget that)
这是最后阶段的代码.
$product->getTypeInstance(true)->setStoreFilter($product->getStoreId(), $product); $optionCollection = $product->getTypeInstance(true)->getOptionsCollection($product); $selectionCollection = $product->getTypeInstance(true)->getSelectionsCollection( $product->getTypeInstance(true)->getOptionsIds($product), $product ); $optionCollection->appendSelections($selectionCollection); $optionRawData = array(); $selectionRawData = array(); $i = 0; foreach ($optionCollection as $option) { $optionRawData[$i] = array( 'option_id' => $option->getOptionId(), //my addition. important otherwise, options going to be duplicated 'required' => $option->getData('required'), 'position' => $option->getData('position'), 'type' => $option->getData('type'), 'title' => $option->getData('title')?$option->getData('title'):$option->getData('default_title'), 'delete' => '' ); foreach ($option->getSelections() as $selection) { $selectionRawData[$i][] = array( 'product_id' => $selection->getProductId(), 'position' => $selection->getPosition(), 'is_default' => $selection->getIsDefault(), 'selection_price_type' => $selection->getSelectionPriceType(), 'selection_price_value' => $selection->getSelectionPriceValue(), 'selection_qty' => $selection->getSelectionQty(), 'selection_can_change_qty' => $selection->getSelectionCanChangeQty(), 'delete' => '' ); } $i++; } $product->setBundleOptionsData($optionRawData); //changed it to $product $product->setBundleSelectionsData($selectionRawData); //changed it to $product
您现在可以更改 optionsrawdata 中的原始数据.或 getBundleOptionsData.另一个也一样.
you can either now change on the raw data in optionsrawdata. or getBundleOptionsData. and same for the other one.