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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top