Il semble qu'il n'y ait pas d'événement d'état de l'ordre par défaut, alors comment procédez-vous habituellement pour observer le changement d'état de l'ordre? Il y a deux possibilités que je vois: a) Écraser le modèle de vente / commande pour créer votre événement personnalisé pour un changement d'état b) Observer l'événement d'enregistrement de commande et regarder l'état dans celui-ci
Est-ce que l'un d'eux est la voie à suivre ou existe-t-il une meilleure option?
Edit: Merci pour vos réponses jusqu'à présent. La situation est un peu plus compliquée. Je souhaite ajouter des informations à la commande en fonction de l'état actuel. Voici maintenant le problème: dans l'événement save_before, j'ai toujours l'ancien état et pas maintenant le nouvel état, car dans le modèle de vente / commande, la méthode _beforeSave () est la suivante:
parent::_beforeSave();
$this->_checkState();
//...
Ainsi, l'événement est traité en parent::_beforeSave();
MAIS l'état de la commande est en fait modifié par la suite $this->_checkState();
(c'est le changement automatique, par exemple si vous créez une facture, l'état passe en traitement s'il n'y a pas encore d'expédition)
Je ne peux pas non plus utiliser l'événement save_after, car je veux enregistrer qch. à la commande et cela casserait probablement tout pour appeler une sauvegarde dans l'événement save_after.
Des idées? Ma seule idée maintenant est de reproduire le $this->_checkState();
comportement dans mon observateur save_before pour savoir quel sera finalement l'état ...
la source
Je préférerais enregistrer l'ancien état des données d'origine dans l'
sales_order_save_before
événement et vérifier à nouveau cela dans lesales_order_save_after
oubefore
, selon ce que vous voulez faire.la source
getOrigData()
place: stackoverflow.com/a/8184430/719023save()
, mais je ne trouve pas d'endroit où cela se produitJe trouve que remplacer la
setState
méthode estMage_Sales_Model_Order
plus facile et meilleur:la source