Magento: программно добавлять новые продукты

Я пытаюсь добавить продукты в Magento 1.5 программно. Мой script в конечном итоге станет заданием cron, регулярно обновляющим и добавляющим продукты, как это продиктовано XML файлом, предоставленным системой учетных записей.

У меня проблема с созданием новых продуктов. Соответствующий сегмент кода из моего script:

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

Продукт создается "наполовину", но script бросает следующую ошибку:

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

Может кто-нибудь, пожалуйста, бросить какой-либо свет на то, что я пропал или что-то не так. Как вы можете сказать по моему тону, я довольно отчаянный, поэтому любая помощь будет очень оценена.

Спасибо

Ответ 1

AMP, OP, уже сам ответил на вопрос.

Цитата:

Прохладный, я нашел проблему, строка: $newproduct->setWebsiteIDs(array(0)); должно быть: $newproduct->setWebsiteIDs(array(1)); Удивительно, как самая маленькая вещь может тратить часы!

Примечание. Абсолютно ОК, чтобы самостоятельно ответить на ваш вопрос. Пожалуйста, просто опубликуйте его как реальный ответ, но не в вопросе или комментариях. Проводка в качестве реального ответа помогает сохранить более четкий список "Без ответа" (избегает заставлять других людей тратить свое время).

Ответ 2

Оба ответа @Jurgen и @Amp идеальны.

Я думаю, что это можно сделать так, чтобы он стал более динамичным

$newproduct->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));