Pracuję nad skryptem, który utworzy lub zaktualizuje produkty w moim katalogu.
Skrypt działa poprawnie, gdy produkt musi zostać utworzony, ale nie wtedy, gdy produkt znajduje się już w bazie danych, dając mi (wiele razy) następujące komunikaty:Aktualizuj produkty programowo w Magento
2011-09-30T08:00:53+00:00 ERR (3): Recoverable Error: Argument 3 passed to Mage_Catalog_Model_Resource_Eav_Mysql4_Abstract::_canUpdateAttribute() must be an array, null given, called in ...
2011-09-30T08:00:53+00:00 ERR (3): Recoverable Error: Argument 3 passed to Mage_Eav_Model_Entity_Abstract::_canUpdateAttribute() must be an array, null given, called in ...
2011-09-30T08:00:53+00:00 ERR (3): Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in ...
Szukałem w metodzie cytowane w wiadomości, ale nie mogę znaleźć żadnego powodu, dla którego skrypt się nie powiedzie.
Skrypt najpierw spróbować załadować towar za pomocą:
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
a następnie testu jeżeli produkt został pobrany za pomocą prostego if(!$product) { //creation }
.
Cały kod występujący po instrukcji if jest udostępniany do utworzenia lub aktualizacji i składa się z wywołań kreatora na obiekcie produktu.
Oto kod używam:
$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();
Może ktoś już w obliczu tego samego problemu.
Każda pomoc jest mile widziana! Dziękuję Ci.
Może możemy Ci pomóc, jeśli umieścisz odpowiednią część skryptu. Zwłaszcza z linią powodującą błąd, ponieważ w tej chwili tylko wiesz, co instrukcja wyzwala błąd. –
Zgadza się, będę edytować pytanie. Dziękuję Ci. –
Wiem, że błąd pochodzi z '$ product-> save();' ale nie wiem dlaczego. Kiedy loguję produkt, widzę, że jest poprawnie załadowany. Myślałem, że proste wywołanie metody 'save()' spowodowałoby aktualizację –