Pourquoi Magento ré-indexe les prix à chaque paiement?

8

Si vous regardez dans Mage_CatalogInventory_Model_Observer :: reindexQuoteInventory (), il appelle la ligne suivante: Mage::getResourceSingleton('catalog/product_indexer_price')->reindexProductIds($productIds);

Le reindexQuoteInventory()est appelé sur les événements suivants:

  1. sales_model_service_quote_submit_success
  2. checkout_submit_all_after (via Mage_CatalogInventory_Model_Observer::checkoutAllSubmitAfter())

Ceci est connu comme l'un des problèmes pour contribuer aux problèmes de verrouillage sur les sites occupés avec un volume élevé d'achats.

Mes questions sont:

  1. Pourquoi les prix des produits sont-ils réindexés à chaque paiement?
  2. Quel effet cela a-t-il de le retirer?
  3. S'il est utilisé pour les règles de catalogue, ce ne serait sûrement que des règles très spécifiques?
john-jh
la source
L'évident serait les règles de promotion (3.), mais je soupçonnerais (sans vérifier le cœur) que d'autres éléments autour de l'affichage dynamique des prix (structures de tarification à plusieurs niveaux, en fonction de la quantité de stock disponible) seraient affectés négativement lorsque le stock diminue.
Ben Lessani - Sonassi

Réponses:

4

La décision d'afficher ou de masquer un produit en fonction de ce paramètre est mise en œuvre par l'indice des prix des produits.

Vous pouvez le vérifier en modifiant le paramètre sur "Oui", puis en affichant une catégorie avec un produit en rupture de stock; vous voyez que le produit est présent. Si vous modifiez ensuite le paramètre sur "Non" et affichez à nouveau la catégorie, vous verrez que le produit en rupture de stock est toujours présent. Vous remarquerez également que ces deux index doivent désormais être actualisés:

Attributs du produit (catalog_product_attribute) Prix du produit (catalog_product_price)

Si vous actualisez ensuite uniquement l'index "Attributs du produit", le produit est toujours visible, si vous actualisez ensuite l'index "Prix du produit", il disparaît, ainsi l'index "Prix du produit" est responsable de la mise en œuvre de ce paramètre.

catalog_product_index_price est la table principale , car c'est la seule qui est incluse dans les requêtes lors du chargement d'une catégorie ou d'une page de produit

Jignesh
la source
Merci pour la bonne réponse, juste une petite erreur à mon humble avis catalog_product_index_priceest uniquement utilisé dans la catégorie / page de recherche, mais pas dans les pages de produits
Fra