MAGENTO结帐中的州或省或其他验证

在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中处理抽象类的最有效方法。如果可以绕过我们上面的方法,请始终尝试不要覆盖抽象类,并找出正在调用抽象类的子类。

希望您喜欢我们的实施,但是如果您有比这更好的方法,请不要犹豫与我们分享。谢谢。

赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

相关文章

Please Login to comment