2011-07-18 10 views
10

मैं Magento 1.5 प्रोग्रामेटिक रूप से उत्पादों को जोड़ने की कोशिश कर रहा हूं। अंततः मेरी स्क्रिप्ट एक क्रॉन नौकरी होगी, नियमित रूप से अद्यतन और उत्पादों को जोड़ने के रूप में खाता प्रणाली द्वारा आपूर्ति की गई एक एक्सएमएल फ़ाइल द्वारा निर्धारित।Magento: प्रोग्रामिंग के नए उत्पादों को जोड़ना

मुझे नए उत्पादों को बनाने में समस्या है। मेरी स्क्रिप्ट से प्रासंगिक कोड खंड है:

$attributeSetId = 4; 

    //$newproduct = Mage::getModel('catalog/product'); 
    $newproduct = new Mage_Catalog_Model_Product(); 

    $newproduct->setTypeId('simple'); 
    $newproduct->setWeight($product->UnitWeight);  
    $newproduct->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH); 
    $newproduct->setStatus(1); 
    $newproduct->setSKU($SKU); 
    $newproduct->setTaxClassId(0); 
    $newproduct->setWebsiteIDs(array(0)); 
    $newproduct->setStoreIDs(array(1)); 
    $newproduct->setStockData(array( 
     'is_in_stock' => 1, 
     'qty' => $XMLproduct->QtyInStock, 
     'manage_stock' => 1 
    )); 

    $newproduct->setAttributeSetId(4); 
    $newproduct->setName($product->Name); 
    $newproduct->setCategoryIds(array(3)); // array of categories it will relate to 

    $newproduct->setDescription($product->LongDescription); 
    $newproduct->setShortDescription($product->Description); 
    $newproduct->setPrice($XMLproduct->SalePrice); 

    try { 
     if (is_array($errors = $newproduct->validate())) { 
      $strErrors = array(); 
      foreach($errors as $code=>$error) { 
       $strErrors[] = ($error === true)? Mage::helper('catalog')->__('Attribute "%s" is invalid.', $code) : $error; 
      } 
      $this->_fault('data_invalid', implode("\n", $strErrors)); 
     } 

     $newproduct->save(); 
    } catch (Mage_Core_Exception $e) { 
     $this->_fault('data_invalid', $e->getMessage()); 
    } 

उत्पाद 'आधा' बनाया है, लेकिन स्क्रिप्ट निम्न त्रुटि फेंक देता है:

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`LittleDickyBird`.`catalog_category_product_index`, CONSTRAINT `FK_CATALOG_CATEGORY_PROD_IDX_CATEGORY_ENTITY` FOREIGN KEY (`category_id`) REFERENCES `catalog_category_entity` (`entity_id`) ON)' in /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement/Pdo.php:228 
Stack trace: 
#0 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array) 
#1 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#2 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array) 
#3 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array) 
#4 /home/default/littledic in /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement/Pdo.php on line 234 

किसी को भी, कृपया, किसी भी प्रकाश पर फेंक कर सकते हैं मैं क्या याद कर रहा हूँ या गलत कर रहा हूँ। जैसा कि आप मेरे स्वर से बताने में सक्षम हो सकते हैं, मैं बहुत हताश हूं, इसलिए किसी भी मदद की बहुत सराहना की जाएगी।

आप

+0

एक ऐसी ही समस्या यह है कि MySQL पर InnoDB को चालू करके हल किया गया था था हो जाता है लगता है। शायद वहां जांचना चाहें। उम्मीद है की वो मदद करदे! – Nic

+0

दुर्भाग्यवश, यह समस्या नहीं प्रतीत होती है, क्योंकि InnoDB पहले से सक्रिय है। लेकिन आपकी मदद के लिए धन्यवाद। – AMP

+1

त्रुटि से पता चलता है कि आप एक श्रेणी आईडी का उपयोग करने का प्रयास कर रहे हैं जो मौजूद नहीं है। क्या आप वाकई एक श्रेणी 3 है? – clockworkgeek

उत्तर

21

AMP, ओपी, पहले से ही सवाल आत्म जवाब धन्यवाद।

उद्धरण:

Cool, I have found the problem, the line: $newproduct->setWebsiteIDs(array(0)); should be: $newproduct->setWebsiteIDs(array(1)); Amazing how the smallest thing can waste hours!

नोट: यह पूरी तरह है OK to self-answer अपना स्वयं का प्रश्न। कृपया इसे एक वास्तविक उत्तर के रूप में पोस्ट करें, लेकिन किसी प्रश्न या टिप्पणी में नहीं। वास्तविक उत्तर के रूप में पोस्ट करना "अनुत्तरित" सूची को और स्पष्ट रखने में मदद करता है (अन्य लोगों को अपना समय बर्बाद करने से बचाता है)।

1

@Jurgen और @Amp उत्तर दोनों परिपूर्ण हैं।

मैं इस इस तरह की तरह किया जा सकता है तो यह और अधिक गतिशील

$newproduct->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId())); 
संबंधित मुद्दे