This is running code which i am using for configurable product.
Here configurable product is using three attribute for color shape and color.
attributes are confcolor,confshape and size, which should be dropdown and with global scope, assigned to your product's attribute set.
The script is using the csv file with three columns like this.
<!-------------------------------->
ConfSku, ConfName, SimpleSku
confsku1, confname1, simple-sku1
confsku1, confname1, simple-sku2
confsku1, confname1, simple-sku3
confsku1, confname1, simple-sku4
confsku2, confname2, simple-sku5
confsku2, confname2, simple-sku6
confsku2, confname2, simple-sku6
confsku2, confname2, simple-sku8
<!-------------------------------->
<!------------Script Created By Shailesh Thapa ----------st.homespice@gmail.com---------->
<?php
error_reporting(E_ALL);
ini_set('memory_limit', -1);
ini_set('max_execution_time', -1);
define('MAGENTO', realpath(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$row = 0;
$quantity =1;
if(($handle = fopen("braided-configurable-Homespice.csv", "r")) !== FALSE)
{
$customeArray = array();
$finalCustomArray = array();
$i=0;
while(($value = fgetcsv($handle, 2000, ",")) !== FALSE)
{
if($i>0 && $i< 18000) //4000000
{
$customeArray[] = $value;
if(sizeof($customeArray)>1)
{
$currentRowIndex = $i-1;
$previoudRowIndex = $currentRowIndex - 1;
if($customeArray[$currentRowIndex][0] == $customeArray[$previoudRowIndex][0])
{
$finalCustomArray[] = $customeArray[$previoudRowIndex]; // sku of product created earlier
}
else
{
$finalCustomArray[] = $customeArray[$previoudRowIndex]; // sku of product created earlier
createConfigurableProduct($finalCustomArray);
unset($finalCustomArray);
}
}
}
$i++;
}
echo "Imported All Products";
fclose($handle);
}
function createConfigurableProduct($associatedRecords)
{
$sku = $associatedRecords[0][0];
$isExistConfigurableProduct = checkAvailability($sku);
$storeId=1;
$websiteIds=1;
$attributesetId = 10;
$sku =$associatedRecords[0][0];
$name = $associatedRecords[0][2]; ;
$price = 100;
$categoryIds ="239";
$status = 1;
$taxClassId = 0;
$visibility = 4;
$description="This is description product";
$shortDescription="This is short description";
$configCodeString="confcolor,confshape,size"; // YOur configurable dropdown attributes
$configAttributeArray = explode(",",$configCodeString);
$associatedSkuArray = array();
foreach($associatedRecords as $tmpArray)
{
$associatedSkuArray[] = $tmpArray[1]; //simple products sku
}
if( $isExistConfigurableProduct==0)
{
$configProduct = Mage::getModel('catalog/product');
$configProduct
->setStoreId($storeId)
->setWebsiteIds(array($websiteIds))
->setAttributeSetId($attributesetId)
->setTypeId('configurable')
->setCreatedAt(strtotime('now'))
->setSku($sku)
->setName($name)
->setStatus($status)
->setTaxClassId($taxClassId)
->setVisibility($visibility)
->setPrice($price)
->setDescription($description)
->setShortDescription($shortDescription)
->setCategoryIds(array($categoryIds))
->setStockData(array(
'use_config_manage_stock' => 0,
'manage_stock' => 1,
'is_in_stock' => 1,
) );
$configurableProductsData = array();
$configAttributesIdsArray = array();
foreach($configAttributeArray as $configAttributeCode)
{
$attributeid = Mage::getModel('eav/entity_attribute')->getIdByCode('catalog_product', $configAttributeCode);
$configAttributesIdsArray[] = $attributeid;
}
$configProduct->getTypeInstance()->setUsedProductAttributeIds($configAttributesIdsArray);
foreach($associatedSkuArray as $simpleSku)
{
$simpleProduct = Mage::getModel("catalog/product")->loadByAttribute("sku",$simpleSku);
if(is_object($simpleProduct))
{
$confCount =0;
$simpleProductsData = array();
foreach($configAttributeArray as $configAttributeCode)
{
$configAttributeid = Mage::getResourceModel('eav/entity_attribute')
->getIdByCode('catalog_product', $configAttributeCode);
//Start --Hard coded for the configurable attributes//
$value_index='';
if($configAttributeCode=='confcolor')
{ $value_index = $simpleProduct->getConfcolor(); }
else if($configAttributeCode=='confshape')
{ $value_index = $simpleProduct->getConfshape(); }
else if($configAttributeCode=='size')
{ $value_index = $simpleProduct->getSize(); }
//End --Hard coded for the configurable attributes//
$simpleProductsData[$confCount] = array(
'label' => $simpleProduct->getAttributeText($configAttributeCode),
'attribute_id' => $configAttributeid,
'value_index' => $value_index,
'is_percent' => 0,
'pricing_value' => $simpleProduct->getPrice(),
);
$confCount++;
}
$configurableProductsData[$simpleProduct->getId()] = $simpleProductsData;
}
}
$configurableAttributesData = $configProduct->getTypeInstance()->getConfigurableAttributesAsArray();
$configProduct->setConfigurableProductsData($configurableProductsData);
$configProduct->setConfigurableAttributesData($configurableAttributesData);
$configProduct->setCanSaveConfigurableAttributes(true);
$configProduct->save();
echo "Configurable Product with SKU = $sku created<hr><br>"; //die;
}
else
{
echo "Configurable Product with SKU = $sku already exist<hr><br>";
}
}
function checkAvailability($productSku)
{
$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', $productSku);
if(is_object($_product))
{
$sku = $_product->getSku();
if($sku!='')
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
?>
Do you face any issues into above code?