構成可能でシンプルな製品をプログラムで作成する magento モジュールを開発しています。次のコードは、構成可能な製品と単純な製品の両方を作成しますが、それらを関連付けません。
$sProduct = Mage::getModel('catalog/product');
$sProduct
->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)
->setSku($sku)
->setName($name)
->setPrice($price)
->setAttributeSetId($set_id) //id of set which contains size_range_c attribute
->setData("size_range_c", $option_id)
->setData("color", $colorId) //another attribute in set but not required
->setDescription($description)
->setShortDescription($short_description)
->setTaxClassId(0);
$sProduct->setStockData(array(
'is_in_stock' => 1,
'qty' => $qty
));
$sProduct->save();
$cProduct = Mage::getModel('catalog/product');
$cProduct->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
->setSku($csku)
->setName($cname)
->setPrice($price)
->setAttributeSetId($set_id) //same set is used for both configurable and simple product
->setUrlKey($url)
->setDescription($description)
->setShortDescription($short_description)
->setTaxClassId(0);
$all_child_products = array();
$all_child_products[$sProduct->getId()] = array(
$sv = array('attribute_id' => $attrId, //attrbute id of size_range_c
'label' => $attr_name, //option name
'value_index' => $option_id, //option_id
'pricing_value' => 0,
'is_percent' => 0)
);
$size_values = array();
$size_values[] = $sv;
$_attributes = Mage::getResourceModel('eav/entity_attribute_collection')
->addFieldToFilter('attribute_code', 'size_range_c');
$attribute = $_attributes->getFirstItem(); //get data for size_range_c
$cProduct->setConfigurableProductsData($all_child_products);
$cProduct->setConfigurableAttributesData(array(
array_merge($attribute->getData(), array('label' => '', 'values' => $size_values))
));
$cProduct->setCanSaveConfigurableAttributes(true);
$cProduct->setCanSaveCustomOptions(true);
$cProduct->save();
基本的に、色ごとに構成可能な製品を作成し、その色のサイズごとに単純な製品を作成して関連付けます。size_range_c 属性は、構成可能な製品と単純な製品の両方に必要です。管理パネルからこれらの製品を見ると、すべて問題ないようです。シンプルな製品を構成可能に手動で関連付けようとしましたが、プログラムで作成された製品は関連製品セクションに表示されません。