Magento:如何加载产品及其在管理中使用的所有数据
我正在尝试获取捆绑选项数据.使用它: $product->getBundleOptionsData
我需要使用它,因为我试图以编程方式更改数据,并且我希望以与 admin 中使用的方式一样接近的方式进行.
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 admin .
但是,当我对上述函数的结果进行 var_dump 时,我得到 NULL
而在捆绑模型产品类型的管理端,我得到了正确的数据.
However, when I var_dump the result of the above function I get NULL
while in admin 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.
相关文章