Beim Speichern der Kundenadresse Ursprungsdaten abrufen
-
13-12-2019 - |
Frage
Ich arbeite an einem Beobachter der customer_address_save_before
Veranstaltung.Beim Speichern der Kundenadresse muss ich überprüfen, ob Änderungen vorliegen, bevor ich einige Aktionen ausführe.
Ich habe etwas Ähnliches für die gemacht customer/customer
modell mit einigen nativen Methoden wie hasDataChanges()
, dataHasChangedFor($key)
und getOrigData()
von der Varien_Object
Klasse.
Als ich jedoch versuchte, es für die zu tun customer/address
modell, ich habe herausgefunden, dass die _origData
eigentum ist null.Dies geschieht nur, wenn die Kundenadresse im Frontend aktualisiert wird.Wenn ich die Kundenadresse im Backend aktualisiere, habe ich die richtige _origData
.
Wissen Sie, warum das passiert und wie Sie das beheben oder umgehen können?
Lösung
Ich habe das Problem vor ein paar Wochen behoben, also werde ich meine Lösung geben, da es jedem helfen könnte :
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);
}
}
}
Wie Sie sich vorstellen können, die onCustomerAddressSaveBefore()
methode wird ausgelöst am customer_address_save_before
Veranstaltung.Darin überprüfe ich, ob das Objekt nicht neu ist (es gibt keine Originaldaten für ein neues Objekt) und ob das Objekt keine enthält _origData
noch.Wenn diese Bedingungen zutreffen, stelle ich die manuell ein _origData
indem Sie sie aus der Datenbank holen.