在Magento中以编程方式更新产品

13 magento magento-1.5

我正在编写一个脚本,用于在我的目录中创建或更新产品.
当需要创建产品时,该脚本可以正常工作,但是当数据库中已存在产品时,它会失败,从而给我(多次)以下消息:

2011-09-30T08:00:53 + 00:00 ERR(3):可恢复错误:传递给Mage_Catalog_Model_Resource_Eav_Mysql4_Abstract :: _ canUpdateAttribute()的参数3必须是一个数组,给定null,调用...
2011-09-30T08: 00:53 + 00:00 ERR(3):可恢复错误:传递给Mage_Eav_Model_Entity_Abstract的参数3 :: _ canUpdateAttribute()必须是一个数组,给定null,调用...
2011-09-30T08:00:53 + 00: 00 ERR(3):警告:array_key_exists()[function.array-key-exists]:第二个参数应该是数组或对象...

我一直在查看消息中引用的方法,但我找不到脚本失败的原因.
该脚本首先尝试使用以下命令加载产品:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);

然后测试是否使用简单的方法检索产品if(!$product) { //creation }.
if语句后面的所有代码都被共享用于创建或更新,并且包含对产品对象的setter调用.

这是我使用的代码:

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
if(!$product) {
    // the product doesn't exist yet
    $product = new Mage_Catalog_Model_Product();
    $product->setSku($sku);
    $product->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE);
    $product->setCreatedAt(strtotime('now'));
}
// setters calls
$product->setTeinte(trim((string)$record->web_teinte));
// ...
// finally save the product
$product->save();
Run Code Online (Sandbox Code Playgroud)

也许有人已经面临同样的问题.
欢迎任何帮助!谢谢.

AMP*_*AMP 24

很有可能,在你的"二手电话"中,你试图设置一些无法直接在$ product上设置的东西.它甚至可能是"setTeinte",因为我不确定那是什么设置.但由于我们无法看到您的所有代码,因此有点难以说明,因此在我指导时,请查看下面的代码,该代码直接在产品上设置一些信息,然后是库存水平.因此,它说明了如何设置某些数据.我希望它有所帮助.

$SKU = (string)$XMLproduct->Sku;
$product = Mage::getModel('catalog/product')->loadByAttribute('sku',$SKU);

if ($product) {
    //Product found, so we need to update it in Magento.

    $product->setName((string)$XMLproduct->Name);
    $product->setPrice((real)$XMLproduct->SalePrice);
    //$product->setDescription((string)$XMLproduct->LongDescription);
    //$product->setShortDescription((string)$XMLproduct->Description);

    $product->save();

    $productId = $product->getId();
    $stockItem =Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
    $stockItemId = $stockItem->getId();

    $stockItem->setData('manage_stock', 1);
    $stockItem->setData('qty', (integer)$XMLproduct->QtyInStock);

    $stockItem->save();

    echo $SKU," Updated: Name: '",(string)$XMLproduct->Name,"', Price: ",(real)$XMLproduct->SalePrice,", Stock level: ",$XMLproduct->QtyInStock,PHP_EOL;

    $updated++;
} 
Run Code Online (Sandbox Code Playgroud)

  • 我终于通过在创建/更新过程之前设置商店ID来使日志从日志中消失(`Mage :: app() - > setCurrentStore(Mage :: getModel('core/store') - > load(Mage_Core_Model_App: :ADMIN_STORE_ID));`)... (3认同)

Muk*_*ain 20

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);在保存产品之前添加可以解决错误.以下示例代码更新了产品的成本.

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$productId = 160;
$newCost = 80;
$product = Mage::getModel('catalog/product')->load($productId);
$product->setCost($newCost)->save();
Run Code Online (Sandbox Code Playgroud)