A friend of mine created a magento webshop recently. He wants to have a few thousand products in his store and asked the manufacturer to give him some kind of data he could simple import to magento. The manufacturer said that he does not own something like that or doesn't want to give it out (I'm not 100% sure about this one). But he was allowed to use all the product information on his site to complete his webshop. So I wrote a webcrawler who grabs all the information. After researching a bit, people told me not to insert all the information using SQL, but rather using a PHP script and the Magento API.
I have some probelms with the following script. It should create a product to add into the Magento database. The insert values are testing values.
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
require("app/Mage.php");
echo "Test
";
Mage::init();
$product = Mage::getModel('catalog/product');
$product->setName('Peter Parker');
$product->setDescription('Peter Parker Description');
$stock_data=array(
'use_config_manage_stock' => 0,
'qty' => 0,
'min_qty' => 0,
'use_config_min_qty'=>0,
'min_sale_qty' => 1,
'use_config_min_sale_qty'=>1,
'max_sale_qty' => 9999,
'use_config_max_sale_qty'=>1,
'is_qty_decimal' => 0,
'backorders' => 0,
'notify_stock_qty' => 0,
'is_in_stock' => 0
);
$product->setData('stock_data',$stock_data);
$product->setTaxClassId(2); // default tax class
$product->setAttributeSetId(9); //9 is for default
$product->setWebsiteIds(array(1));
$product->setCategoryIds(array(9));
$product->setStatus(1);//1=Enabled; 2=Disabled;
$product->setVisibility(4);//4 = catalog & search.
$image_name = 'blabla.JPEG';
$url = 'http://www.rasch-tapeten.de/shop/media/catalog/product/cache/1/image/bf8bb7ab75fe41b467eed88aa79f7917/1/3/133806.JPEG';
$img = 'media/'.$image_name;
echo $img."
";
function save_image($inPath,$outPath){
//Download images from remote server
$in= fopen($inPath, "rb");
$out= fopen($outPath, "wb");
while ($chunk = fread($in,8192))
{
fwrite($out, $chunk, 8192);
}
fclose($in);
fclose($out);
}
save_image($url, $img);
try
{
$product->addImageToMediaGallery($img, array('image', 'small_image', 'thumbnail'), false, false);
}catch(Mage_Core_Exception $e)
{
echo $e->getMessage();
}
try
{
$product->save();
}catch(Exception $e)
{
echo $e->getMessage();
}
?>
Well if i execute this one it throws the following exception:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`magento`.`catalog_product_entity`, CONSTRAINT `FK_CAT_PRD_ENTT_ATTR_SET_ID_EAV_ATTR_SET_ATTR_SET_ID` FOREIGN KEY (`attribute_set_id`) REFERENCES `eav_attribute_set` (`attribute_set_id`) ON DE)
Does anyone know what I did wrong?
$product->setAttributeSetId(9); //9 is for default
Are you sure that the default is 9?
In our method to import products this is what we have done:
protected $defaultAttributeSetId; // Default attribute set
private function getDefaultAttributeSetId()
{
if (!isset($this->defaultAttributeSetId))
{
$categoryModel = Mage::getModel("catalog/category");
$this->defaultAttributeSetId = $categoryModel->getDefaultAttributeSetId();
}
return $this->defaultAttributeSetId;
}
...
->setAttributeSetId($this->getDefaultAttributeSetId())
...
Using this script it will allow you to create a product using php script
$product = Mage::getModel('catalog/product');
$product->setSku("ABC123");
$product->setName("Type 7 Widget");
$product->setDescription("This widget will give you years of trouble-free widgeting.");
$product->setShortDescription("High-end widget.");
$product->setPrice(70.50);
$product->setTypeId('simple');
$product->setAttributeSetId(9); // need to look this up
$product->setCategoryIds("20,24"); // need to look these up
$product->setWeight(1.0);
$product->setTaxClassId(2); // taxable goods
$product->setVisibility(4); // catalog, search
$product->setStatus(1); // enabled
// assign product to the default website
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));
$product->save();
// for stock
$stockData = $product->getStockData();
$stockData['qty'] = 10;
$stockData['is_in_stock'] = 1;
$stockData['manage_stock'] = 1;
$stockData['use_config_manage_stock'] = 0;
$product->setStockData($stockData);
this code for image gallery :
$imagesdata = // import all images in array;<br>
$getnumimages = sizeof($imagesdata);<br>
for($i=0;$i<$getnumimages;$i++)<br>
$product->addImageToMediaGallery ($imagesdata[$i], array('image','small_image','thumbnail'), false, false);