Answers:
在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
。
您将需要Mage_Customer_Model_Address_Abstract
在第375-377行中修改类别*,注释电话号码的Zend验证。
//if (!Zend_Validate::is($this->getTelephone(), 'NotEmpty')) {
// $errors[] = Mage::helper('customer')->__('Please enter the telephone number.');
//}
以及数据库中的电话属性本身删除了所需的类。可以通过以下查询完成
UPDATE `eav_attribute` SET `is_required` = 0 WHERE `attribute_code` = 'telephone';
这将处理电话字段的前端(Javascript)验证。
**确保将类文件复制到local
代码目录中*
eav_attribute
带有代码“电话”,因此您无法确定哪个已更新。然后代码应该工作(刚刚测试过)。对于可视部分,您仍然需要以<em>*</em>
所有形式删除字段标签(签出/地址编辑)。当然,如果您安装了某种“一步式结帐”功能,则它可能会覆盖某些默认的Magento功能,并且此答案可能无效。
我建议更改网站主题的地址模板,并将手机设置为默认值为空格或破折号的隐藏字段。这将不需要重写/覆盖。
您不能简单地使用自定义扩展名和配置重写来重写使用抽象的类。
Mage_Sales_Model_Quote_Address
,Mage_Customer_Model_Address
,Mage_Sales_Model_Order_Address
,然后,您可以创建自己的validate
功能,该功能将排除电话检查,或者更好地检查所有必需的属性并验证它们是否已设置。