Create a product from PHP - Magento

匆匆过客 提交于 2019-12-08 05:31:49

问题


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 \n";
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 &amp; 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."\n";
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?


回答1:


$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())
...



回答2:


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);



回答3:


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);


来源:https://stackoverflow.com/questions/11759937/create-a-product-from-php-magento

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!