Mettre à jour les produits par programme dans Magento
Je suis en train de travailler sur un script qui permettra de créer ou de mettre à jour les produits de mon catalogue.
Le script fonctionne très bien lorsque le produit a besoin d'être créé, mais il échoue lorsque le produit existe déjà dans la base de données me donner (beaucoup de fois) les messages suivants :
2011-09-30T08:00:53+00:00 ERR (3): Recouvrable d'Erreur: Argument 3
passé à
Mage_Catalog_Model_Resource_Eav_mysql4_abstract::_canUpdateAttribute()
doit être un tableau, null donné, appelé en ...
2011-09-30T08:00:53+00:00
ERR (3): Recouvrable d'Erreur: Argument passé à 3
Mage_Eav_Model_Entity_Abstract::_canUpdateAttribute() doit être un
tableau, null donné, appelé en ...
2011-09-30T08:00:53+00:00 ERR (3):
Avertissement: array_key_exists() [function.tableau-clé-existe en]:
deuxième argument doit être un tableau ou un objet en ...
J'ai été à la recherche à la méthode citée dans le message, mais je ne peux pas trouver une raison pour laquelle le script échoue.
Le script d'abord essayer de charger un produit en utilisant :
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
puis de tester si le produit a été extrait à l'aide d'un simple if(!$product) { //creation }
.
Tout le code qui suivent l'instruction if est partagé pour la création ou la mise à jour et se compose de setter appels sur l'objet produit.
Voici le code que j'utilise :
$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();
Peut-être que quelqu'un a déjà été confronté au même problème.
Toute aide est la bienvenue ! Merci.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Les Chances sont, dans votre "poseur d'appels", vous essayez de créer quelque chose qui ne peut pas être directement défini sur $produit. Il pourrait même être le "setTeinte" comme je ne suis pas sûr de ce qui est tenté de définir. Mais comme nous ne pouvons pas voir tout votre code, il est un peu difficile à dire, donc, comme je le guide, regardez le code ci-dessous, qui définit certaines informations directement sur le produit, puis les niveaux de stock. Il n'est donc illustrer comment certaines données. J'espère que cela aide.
Ajoutant
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
avant d'enregistrer le produit résout l'erreur. L'exemple de code ci-dessous mises à jour du produit coût.Facile avec l'API Magento,
peut également utiliser des méthodes....
exemple
Peut également régler le mode Admin