Trước khi 1.8.1
tôi không biết bất kỳ cách nào để thực hiện công việc này, bạn phải ghi đè lớp lõi trừu tượng trong nhóm mã cục bộ hoặc viết lại mỗi lớp con duy nhất (xấu xí, tôi biết).
Từ đó 1.8.1
, họ giới thiệu sự kiện customer_address_validation_after
. Tôi đã loại bỏ xác nhận bằng cách sử dụng phản xạ, ngay cả khi tôi không quá tự hào về nó. Có thể không giải quyết vấn đề của bạn, nhưng tôi nghĩ dù sao tôi cũng sẽ đăng nó.
/**
* 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.');
}
Tôi cũng đã viết một kịch bản cập nhật để xác định tệp không cần thiết và chỉnh sửa tất cả các biểu mẫu để xóa xác thực giao diện. Như tôi đã nói, nó có thể không phải là giải pháp tốt nhất, nhưng tốt hơn là viết lại 3-4 lớp IMHO.
CẬP NHẬT
Đội lõi bọc các sự kiện customer_address_validation_after
trong một khởi đầu có điều kiện từ 1.9.0
thông qua 1.9.1.1
(Tôi thực sự tự hỏi tại sao, làm cho không có ý nghĩa với tôi ...) vì vậy giải pháp của tôi sẽ không làm việc cho các phiên bản này, không may. Các điều kiện đã may mắn được gỡ bỏ trong 1.9.2
.