使用PHP创建产品-Magento [英] Create a product from PHP - Magento

查看:115
本文介绍了使用PHP创建产品-Magento的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的一个朋友最近创建了一个magento网上商店.他想在自己的商店中存上几千种产品,并要求制造商提供一些他可以简单地导入到magento的数据.制造商说他不拥有这样的东西,或者不想把它发布出去(我不确定这件事是100%的).但是他被允许使用其站点上的所有产品信息来完成他的网上商店.因此,我写了一个抓取所有信息的网络爬虫.经过研究后,人们告诉我不要使用SQL插入所有信息,而是使用PHP脚本和Magento API.

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.

我有一些使用以下脚本的探针.它应该创建一个要添加到Magento数据库中的产品.插入值是测试值.

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)

有人知道我做错了吗?

推荐答案

$product->setAttributeSetId(9); //9 is for default

您确定默认值为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())
...

这篇关于使用PHP创建产品-Magento的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆