Lors de l'enregistrement de l'adresse du client, obtenez les données d'origine
-
13-12-2019 - |
Question
Je travaille sur un observateur du customer_address_save_before
événement.Lors de la sauvegarde de l'adresse du client, je dois vérifier s'il y a des changements avant d'effectuer certaines actions.
J'ai fait quelque chose de similaire pour le customer/customer
modèle avec certaines méthodes natives telles que hasDataChanges()
, dataHasChangedFor($key)
et getOrigData()
du Varien_Object
classe.
Cependant, quand j'ai essayé de le faire pour le customer/address
modèle, j'ai compris que le _origData
la propriété est nulle.Cela se produit uniquement lorsque l'adresse du client est mise à jour dans le front-end.Lorsque je mets à jour l'adresse du client dans le back-end, j'ai la bonne _origData
.
Savez-vous pourquoi cela se produit et comment résoudre ou contourner ce problème ?
La solution
J'ai résolu le problème il y a quelques semaines, je vais donc donner ma solution car elle pourrait aider tout le monde :
public function onCustomerAddressSaveBefore(Varien_Event_Observer $observer)
{
$customerAddress = $observer->getEvent()->getCustomerAddress();
/*
* If the customer address exists, as $_origData of customer's address is sometimes null, we have to set it manually
*/
if (!$customerAddress->isObjectNew() && !$customerAddress->getOrigData()) {
$customerOrigAddress = Mage::getModel('customer/address')->load($customerAddress->getId());
foreach ($customerOrigAddress->getData() as $field => $value) {
$customerAddress->setOrigData($field, $value);
}
}
}
Comme vous pouvez le deviner, le onCustomerAddressSaveBefore()
la méthode est déclenchée sur customer_address_save_before
événement.A l'intérieur, je vérifie si l'objet n'est pas nouveau (il n'y a pas de données originales pour un nouvel objet) et si l'objet ne contient pas _origData
encore.Si ces conditions sont vraies, je règle manuellement le _origData
en les récupérant de la base de données.