Bevor 1.8.1
mir keine Möglichkeiten bekannt sind, wie dies funktioniert, müssen Sie entweder die abstrakte Kernklasse im lokalen Codepool überschreiben oder jede einzelne untergeordnete Klasse neu schreiben (hässlich, ich weiß).
Von nun 1.8.1
an stellten sie die Veranstaltung vor customer_address_validation_after
. Ich habe die Validierung durch Reflexion beseitigt, auch wenn ich nicht zu stolz darauf bin. Könnte Ihr Problem nicht lösen, aber ich dachte, ich würde es trotzdem posten.
/**
* Validate address ignoring phone-related errors
*
* Internally uses reflexion. Maybe not the most
* efficient or clean implementation, but allows
* this functionality to be implemented without
* the need to rewrite 3 core classes.
*
* Listens to:
* - customer_address_validation_after
*
* @param Varien_Event_Observer $observer Event observer
*/
public function validateAddress(Varien_Event_Observer $observer)
{
/* @var $address Mage_Customer_Model_Address_Abstract */
$address = $observer->getAddress();
if (!$address) {
return;
}
$prop = new ReflectionProperty('Mage_Customer_Model_Address_Abstract', '_errors');
if (!$prop) {
return;
}
$prop->setAccessible(true);
$errors = $prop->getValue($address);
$prop->setValue($address, array());
$errorMessage = $this->getErrorMessage();
foreach ($errors as $error) {
if ($error !== $errorMessage) {
$address->addError($error);
}
}
}
/**
* Get standard error message
*
* @return string
*/
protected function getErrorMessage()
{
return Mage::helper('customer')->__('Please enter the telephone number.');
}
Ich habe auch ein Aktualisierungsskript geschrieben, um die Datei als nicht erforderlich zu definieren, und alle Formulare bearbeitet, um die Frontend-Validierung zu entfernen. Wie ich schon sagte, es ist vielleicht nicht die beste Lösung, aber es ist besser, als IMHO 3-4 Klassen neu zu schreiben.
UPDATE
Das Kernteam wickelte das Ereignis customer_address_validation_after
in einem bedingten ausgehend von 1.9.0
durch 1.9.1.1
(ich wirklich fragen , warum, für mich keinen Sinn macht ...) so meine Lösung funktioniert nicht für diese Versionen, leider. Die Bedingung wurde zum Glück entfernt 1.9.2
.