2012-08-01 36 views
1

我的一個朋友最近創建了一個magento網店。他希望在他的商店裏有幾千件產品,並要求製造商給他一些他可以簡單導入到magento的數據。製造商說他不擁有這樣的東西,或不想放棄(我對此不是100%肯定)。但他被允許使用他網站上的所有產品信息來完成他的網上商店。所以我寫了一個抓取所有信息的網絡爬蟲。經過研究,人們告訴我不要使用SQL插入所有信息,而是使用PHP腳本和Magento API。創建一個來自PHP的產品 - Magento

我有一些與下面的腳本probelms。它應該創建一個產品添加到Magento數據庫。插入值是測試值。

<?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(); 
} 
?> 

那麼,如果我執行這一項,它拋出以下異常:

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) 

有誰知道我做錯了什麼?

+0

從錯誤的外觀看起來好像'$ product-> setAttributeSetId(9);'可能是錯誤的。你確定這是默認的,並且表'eav_attribute_set'中是否存在鍵9? – 2012-08-01 13:13:02

+0

啊耶謝謝:)它是4,而不是9.現在它的工作:) – Ogofo 2012-08-01 13:46:45

+0

也看看在Magmi項目:http://sourceforge.net/projects/magmi/如果您的爬網腳本將所有內容轉儲到CSV您可以使用magmi從CSV導入所有內容。它閃電般快速。 – sulman 2012-08-01 14:19:21

回答

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

你確定默認值是9嗎?

在我們的方法導入的產品,這是我們所做的工作:

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

使用這個腳本它可以讓你使用PHP腳本

$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); 
+0

相關產品呢? – Dor 2013-10-01 06:37:26

0

此代碼爲圖像畫廊創建產品:

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