J'essaie de mettre à jour le prix de beaucoup de produits (plus de 10 000). La façon dont je le fais actuellement prend beaucoup de temps. Quelle est la meilleure façon de parcourir tous les produits et de mettre à jour la plupart d'entre eux?
Merci
magento-1.9
product
products-management
eftihios1986
la source
la source
Réponses:
Salut Magento fournit un attribut par le code ci-dessous
Exemple:
Utilisation de la collection de produits:
la source
Mage::getSingleton('catalog/product_api')->update();
etMage::getSingleton('catalog/product_action')->updateAttributes()
. product_api a pris 1,7 seconde en moyenne et product_action a pris 1,0 seconde en moyenne. cependant, a$product->getResource()->saveAttribute()
pris une moyenne de 0,04 secondes sur la moyenne. Merci!$product->getResource()->saveAttribute
action. THX!!Écrivez une requête SQL.
Deuxième meilleur moyen (et celui que je recommande):
\Mage_Catalog_Model_Resource_Product_Action::updateAttributes
Exemple de code par u_maxx:
Les sélections multiples sont normalement enregistrées sous forme d'entiers séparés par des virgules, comme
27,42,4711
. Par conséquent, si vous modifiez la valeur pour dire1
, les autres valeurs sont perdues. Mais ce que vous pouvez faire, c'est commeCONCAT(value, ',1')
ajouter la nouvelle valeur à la fin, séparée par une virgule. Je pense que même si vous ajoutez une valeur deux fois, ce n'est pas un problème, car Magento la filtre la prochaine fois que l'élément est enregistré et ignore la deuxième valeur.la source
<?php $allProductIds = Mage::getModel('catalog/product')->getCollection()->getAllIds(); $attributeCode = 'some_eav_attribute'; $attributeValue = NULL; $attrData = array( $attributeCode => $attributeValue ); $storeId = 0; Mage::getSingleton('catalog/resource_product_action')->updateAttributes($allProductIds, $attrData, $storeId);
Mage::getSingleton('catalog/resource_product_action')
àMage::getModel('catalog/product_action')
avec exactement les mêmes paramètres mentionnés ci-dessus.Produits 10k, utilisez SQL. EAV brouille juste les eaux. Par question est le moyen le plus rapide.
Rechercher l'attribut_id
Mettre à jour avec la
attribute_id
requête trouvée ci-dessus.Je suppose que vous pouvez faire une sous-sélection avec mise à jour, mais pour simplifier, deux requêtes SQL sont plus faciles à saisir.
REMARQUE:
entity_type_id = 4
correspond le plus souvent aux entrées EAV du produit. Dans le cas où vous devez mettre à jour en masse la catégorie ou les attributs client, cela différera ainsi que le tableau mis à jour en fonction du type d'attribut que vous mettez à jour. Aussi, si vous avez une configuration multi-magasins, assurez-vous de noter et de conditionnerstore_id
la source
Suite à la réponse de Fabian ci-dessus, vous pouvez mettre à jour plusieurs champs à la fois. L'exemple ci-dessous n'en a que 2 (en stock, état des stocks), mais vous pouvez en utiliser autant que vous le souhaitez.
la source