在尝试了几个小时的不同解决方案后,我求助于管理区域内可配置的保存过程,这使我转向了以下方法;
Mage_Catalog_Model_Product_Type_Configurable::save
然后我发现,以编程方式保存可配置的 getConfigurableAttributesData 和 getConfigurableProductsData 时为空。这导致我创建了一个自定义 shell 脚本,我在其中加载了一组可配置产品,循环并重新保存了数据;
foreach($_collectionConfigurables as $_configurableProduct){
// flag to be saved
$_configurableProduct->setCanSaveConfigurableAttributes(1);
// get the configurable attributes
$_configurableAttributes = $_configurableProduct->getTypeInstance()->getConfigurableAttributesAsArray();
$_configurableProduct->setConfigurableAttributesData($_configurableAttributes);
// Build a collection of configurable children
$_collectionChildren = $_configurableProduct->getTypeInstance()->getUsedProducts();
// loop the children and save configurable attributes into an array
$arr = array();
foreach($_collectionChildren as $_childProduct){
foreach($_configurableAttributes as $_attr){
$arr[$_childProduct->getId()][] = array(
'attribute_id' => $_attr['attribute_id'],
'label' => $_childProduct->getAttributeText($_attr['attribute_code']),
'value_index' => $_childProduct->getData($_attr['attribute_code'])
);
}
}
$_configurableProduct->setConfigurableProductsData($arr);
$_configurableProduct->save();
echo "{$_configurableProduct->getId()}\n";
}
请注意,这已在 CE 1.9.2.1 上进行了尝试和测试