我正在尝试以编程方式更新自定义模块中的产品价格。这是我的代码:
Mage::setIsDeveloperMode(true); // for debug only
try
{
$product = Mage::getModel('catalog/product')->load($productId);
$product->setPrice($newPrice);
$product->save();
}
catch (Exception $ex)
{
echo "Error: ". $ex->getMessage();
}
执行此代码时,我得到以下异常:
警告:为foreach()提供的参数无效 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在1180行
在system.log
文件中,我看到了所有这些条目:
2016-03-17T18:01:06 + 00:00 ERR(3):警告:提供的参数无效 for foreach()in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在线1180 2016-03-17T18:01:06 + 00:00 ERR(3):可恢复的错误: 争论3传递给 Mage_Catalog_Model_Resource_Abstract :: _ canUpdateAttribute()必须是 类型数组,null给定,调用 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在1225行并定义于 /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php 543号线2016-03-17T18:01:06 + 00:00 ERR(3):可恢复错误: 争论3传递给 Mage_Eav_Model_Entity_Abstract :: _ canUpdateAttribute()必须是 type array,null给定,调用 /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php 在545行并在中定义 /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在1254号线2016-03-17T18:01:06 + 00:00 ERR(3):警告: array_key_exists()期望参数2为数组,在给定的位置为null /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php 在第1256行
知道可能导致这种情况的原因是什么?我的dev magento设置上的相同代码有效,但在生产magento中,这个错误开始出现,所以我有点困惑。
答案 0 :(得分:18)
您可以尝试设置商店:
法师::应用程序() - > setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);
答案 1 :(得分:1)
尝试以下代码。需要通过商店ID。这似乎是问题所在。
$array_product = array($productId);
Mage::getSingleton('catalog/product_action')->updateAttributes($array_product, array('price' => $newPrice), $storeId);
答案 2 :(得分:0)
$storeId='store_id';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$productIds = array('products_ids');
$products = Mage::getModel('catalog/product')->getCollection();
$products->addStoreFilter();
$products->addAttributeToSelect('*');
$products->addAttributeToFilter('entity_id', array('in' => $productIds));
foreach($products as $product)
{
$price=$product->setPrice('price');
Mage::app()->setCurrentStore($storeId);
$product->save();
}
试试这段代码,它对我有用。
答案 3 :(得分:-1)
如果您以编程方式更新产品,请尽量注意,然后尽量避免使用magento保存功能,这对于单个产品来说是完美的,但是当您使用大量产品时,它会使您的网站变慢。请使用我的下面的代码然后通过SSH重新索引magento。它会对你有用。
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$write->query("
UPDATE catalog_product_entity_decimal val
SET val.value = (".$productPrice['Price'].")
WHERE val.attribute_id = (
SELECT attribute_id FROM eav_attribute eav
WHERE eav.entity_type_id = 4
AND eav.attribute_code = 'price'
)
AND val.entity_id = '".$product->getId()."'
");