2016-03-17 6 views
1

Я пытаюсь программно обновить цену продукта в рамках настраиваемого модуля. Это мой код:Программно обновлять цену продукта в Magento - Недопустимый аргумент, предоставленный foreach()

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

При выполнении этого кода, я получаю следующее исключение:

Warning: Invalid argument supplied for foreach() in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1180

В файле system.log, я вижу, выделяют из этих записей:

2016-03-17T18:01:06+00:00 ERR (3): Warning: Invalid argument supplied for foreach() in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1180 2016-03-17T18:01:06+00:00 ERR (3): Recoverable Error: Argument 3 passed to Mage_Catalog_Model_Resource_Abstract::_canUpdateAttribute() must be of the type array, null given, called in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1225 and defined in /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php on line 543 2016-03-17T18:01:06+00:00 ERR (3): Recoverable Error: Argument 3 passed to Mage_Eav_Model_Entity_Abstract::_canUpdateAttribute() must be of the type array, null given, called in /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php on line 545 and defined in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1254 2016-03-17T18:01:06+00:00 ERR (3): Warning: array_key_exists() expects parameter 2 to be array, null given in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1256

Любой идея, что может быть причиной этого? Тот же код на моей настройке dev magento работает, но в производстве magento эта ошибка начала появляться, поэтому я немного запутался.

+1

'должен быть типа array, null given' ... так что вы идете. вы передали null, чтобы что-то ожидало массив. –

+0

@MarcB уже проверяет '$ newPrice', он не является нулевым и не должен быть массивом. Ошибка у меня запуталась, потому что она настолько случайна. – Latheesan

ответ

5

Вы можете попробовать установить магазин:

Mage :: приложение() -> setCurrentStore (Mage_Core_Model_App :: ADMIN_STORE_ID);

+0

Почему? Мой код выполняется в настраиваемом модуле, который уже находится в adminhtml с необходимыми разрешениями. Я попробую безликой. – Latheesan

+0

Я не уверен, почему вы должны сделать это сейчас в текущей версии Magento. Может, кто-то еще может объяснить? –

+0

Хорошо, это странно. Это действительно сработало: s – Latheesan

0

Пожалуйста, обратите внимание, если вы программно обновляете продукт, а затем старайтесь избегать функции сохранения пурпурного цвета, которая идеально подходит для одного продукта, но когда вы будете использовать множество продуктов, это сделает ваш сайт медленным. Пожалуйста, используйте мой ниже код, а затем rendex magento через SSH. он будет отлично работать для вас.

$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()."' 
        "); 
+0

Эта работа, но вы должны запустить подпрограмму reindex для обновления таблицы flat table и catalog_product_index_price. –

+0

Вы можете программировать reindex с помощью этого кода. $ process = Mage :: getModel ('index/indexer') -> getProcessByCode ('catalog_product_price'); $ process-> reindexAll(); –

Смежные вопросы