在magento中,在Mage_Customer_Model_Address_Abstract类中指定了一些验证,在某些情况下,您可能需要更改或删除这些验证。覆盖抽象类在Magento中可能很棘手,因此也不建议使用,因为抽象类可以由很少的类使用,因此更改抽象类的影响很大。
但是好消息是您可以在不覆盖抽象类的情况下做到这一点,今天我们将看看如何实现这一点。
请参阅下面的逐步实现-:
第1步
在本地文件夹下创建一个模块,即app / code / local / Scommerce / Validation
第2步
通过添加以下内容-在etc / modules目录下创建Scommerce_Validation.xml来注册模块。
<Scommerce_Validation>
<active>true</active>
<codePool>local</codePool>
<Scommerce_Validation>
第三步
现在在您的模块目录下创建config.xml,即app / code / local / Scommerce / Validation / etc
<?xml version="1.0"?>
<config>
<modules>
<Scommerce_Validation>
<version>0.0.1</version>
</Scommerce_Validation>
</modules>
<global>
<models>
<scommerce_validation>
<class>Scommerce_Validation_Model</class>
</scommerce_validation>
<customer>
<rewrite>
<address>Scommerce_Validation_Model_Address</address>
</rewrite>
</customer>
</models>
</global>
</config>
第4步
现在,在模块的模型目录中创建Address.php,即app / code / local / Scommerce / Validation / Model
<?php
class Scommerce_Validation_Model_Address extends Mage_Customer_Model_Address
{
public function validate()
{
$errors = parent::validate();
$helper = Mage::helper('customer');
$stateError = $helper->__('Please enter the state/province.');
if(in_array($stateError, $errors)) {
unset($errors[array_search($stateError, $errors)]);
}
if (empty($errors)) {
return true;
}
return $errors;
}
}
您可能已经注意到,我们没有覆盖地址类,而是覆盖了地址类,该地址类实际上是在调用抽象类的validate函数。这是在magento中处理抽象类的最有效方法。如果可以绕过我们上面的方法,请始终尝试不要覆盖抽象类,并找出正在调用抽象类的子类。
希望您喜欢我们的实施,但是如果您有比这更好的方法,请不要犹豫与我们分享。谢谢。