Sto lavorando a uno script che creerà o aggiornerà i prodotti nel mio catalogo.
Lo script funziona bene quando il prodotto deve essere creato, ma non riesce quando il prodotto è già presente nel database di darmi (molte volte) i seguenti messaggi:Aggiorna i prodotti a livello di codice in 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 ...
Sono stato a guardare il metodo citato nel messaggio, ma non riesco a trovare alcun motivo per cui lo script fallisce.
Lo script prima provare a caricare un prodotto utilizzando:
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
e quindi verificare se il prodotto è stato recuperato utilizzando un semplice if(!$product) { //creation }
.
Tutto il codice che segue l'istruzione if è condiviso per la creazione o l'aggiornamento ed è costituito da chiamate setter su oggetto prodotto.
ecco il codice che uso:
$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();
Forse qualcuno ha già affrontato lo stesso problema.
Qualsiasi aiuto è benvenuto! Grazie.
Forse possiamo aiutarti se pubblichi la parte rilevante del tuo script. Soprattutto includendo la riga che causa l'errore, perché al momento solo tu sai quale istruzione attiva l'errore. –
esatto, modifico la domanda. grazie. –
So che l'errore arriva con '$ product-> save();' ma non so perché. Quando registro il prodotto, vedo che è stato caricato correttamente. Ho pensato che una semplice chiamata al metodo 'save()' avrebbe reso l'aggiornamento –