Перш ніж 1.8.1
я не знаю жодних способів зробити цю роботу, вам доведеться або замінити абстрактний основний клас у локальному кодовому пулі, або переписати кожен дочірній клас (негарно, я знаю).
Відтепер 1.8.1
вони представили подію customer_address_validation_after
. Я позбувся валідації за допомогою рефлексії, навіть якщо не надто пишаюся цим. Можливо, не вирішити вашу проблему, але я подумав, що все-таки опублікую її.
/**
* 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.');
}
Я також написав сценарій оновлення, щоб визначити поданий як не потрібний, і відредагував усі форми, щоб видалити перевірку фронтенда. Як я вже говорив, це може бути не найкращим рішенням, але це краще, ніж переписування ІМХО 3-4 класів.
UPDATE
Основна команда загорнуті подія customer_address_validation_after
в умовному , починаючи з 1.9.0
через 1.9.1.1
(я дійсно задаюся питанням, чому, не має ніякого сенсу для мене ...) , тому моє рішення не буде працювати для цих версій, на жаль. Умовно, на щастя, було знято в 1.9.2
.