J'utilise la version Magento 1.8. J'ai écrit un observateur qui doit s'exécuter lorsque l'administrateur enregistre une critique de produit avec le statut "Approuvé". Et j'ai créé un attribut de notation pour chaque produit avec multiselect et il devrait automatiquement se mettre à jour à chaque fois que l'administrateur enregistre la critique d'un produit.
Remarque: les avis figurent dans Rapports / Avis / Avis sur les produits.
etc / Config.xml Code:
<review_save_after>
<observers>
<efkadminhtml>
<class>efkadminhtml/observer</class>
<method>ratingsUpdate</method>
</efkadminhtml>
</observers>
</review_save_after>
mode / Code Observateur
public function ratingsUpdate(Varien_Event_Observer $observer)
{
$object = $observer->getEvent()->getObject();
$statusId = $object->getStatusId();
if($statusId == 1) {
$common = Mage::getSingleton('catalog/common');
$attribute = $common->getAttribute('ratings');
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$productId = $object->getEntityPkValue();
$product = Mage::getModel('catalog/product')->load($productId);
$avgRating = Mage::getBlockSingleton('efkreports/product_allReviews')->getAvgReview($product->getId());
Mage::log($avgRating);
Mage::log($attribute->getOptionId(round($avgRating)));
$product->setRatings($attribute->getOptionId(round($avgRating)));
//$product->setRatings(round($avgRating));
$product->save();
}
}
Lorsque l'administrateur tente d'enregistrer la révision d'un produit, le code d'observateur ci-dessus est en cours d'exécution et la révision est mise à jour correctement, mais le produit obtient la valeur de la révision précédente plutôt que la dernière révision mise à jour.
J'ai écrit <review_save_after>
mais ça prenait une valeur précédente. Quel est l'événement appelé après "Enregistrer l'avis" Est-ce correct ou non?
Veuillez me dire où je me trompe.
Merci d'avance.