2013-01-05 32 views
0

我正在開發一個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屬性對於可配置產品和簡單產品都是必需的。當我從管理面板看這些產品時,一切似乎都很好。我甚至嘗試將簡單產品手動關聯到可配置,但以編程方式創建的產品不會顯示在關聯產品部分。

回答

0

我甚至嘗試手動簡單的產品到 配置的,但程序創建的產品不會出現在 相關產品的部分關聯。

任何可配置產品都是使用一個或多個可配置屬性創建的,比如對於這種情況,請說Color。可配置產品不能有兩個具有相同屬性值的關聯產品,比如說具有相同的紅色。此外,即使我們點擊「重置過濾器」所有產品,Magento也不會在「關聯產品」部分中顯示。如果可配置產品是在Color屬性之後生成的,它會顯示所有設置了顏色屬性值(顏色不爲空)的簡單產品,所以我認爲對於您的產品,您沒有爲任何產品設置顏色屬性,所以它不顯示「相關產品」中的任何產品。

一種快速的方法來programmaticly一個簡單的產品到配置的產品相關聯的是使用此代碼:

Mage::getResourceModel('catalog/product_type_configurable')->saveProducts($pConfigurable, array($idSimpleProduct)); 

注:$ pConfigurable是配置產品的實例,$ idSimpleProduct是簡單的產品,你想要什麼的ID關聯。在使用此功能之前,簡單的產品也必須設置顏色屬性。如果其他簡單產品已經與相同的顏色值關聯,則關聯將被覆蓋。

將簡單產品關聯到可配置產品(和magento方式)的另一種解決方案可能是因爲我在代碼中看到它將setConfigurableAttributesData中的數據設置爲可配置產品模型實例,然後調用save,但我認爲您的代碼示例中陣列數據不完整。

+0

我正在使用此答案中的代碼,但它不會在商店中顯示。它將簡單的產品鏈接到可配置的產品,但數據庫中沒有鏈接。如何將顏色鏈接到可配置產品? – Refilon

相關問題