1

magentoの抽象クラスをオーバーライドしたい。すなわちMage_Customer_Model_Address_Abstract。私の意図は、電話番号の検証を取り除くことです。

app / code /core/Mage/Customer/Model/Address/Abstract.phpをコピーしてみまし

app / code / local /Telephone/Customer/Model/Address/Abstract.php

関数validate()を新しいコードでオーバーライドしようとしました。

public function validate()
    {
        $errors = array();
        $this->implodeStreetAddress();
        if (!Zend_Validate::is($this->getFirstname(), 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('Please enter the first name.');
        }

        if (!Zend_Validate::is($this->getLastname(), 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('Please enter the last name.');
        }

        if (!Zend_Validate::is($this->getStreet(1), 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('Please enter the street.');
        }

        if (!Zend_Validate::is($this->getCity(), 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('Please enter the city.');
        }

       /* if (!Zend_Validate::is($this->getTelephone(), 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('Please enter the phone number.');
        } */

        $_havingOptionalZip = Mage::helper('directory')->getCountriesWithOptionalZip();
        if (!in_array($this->getCountryId(), $_havingOptionalZip)
            && !Zend_Validate::is($this->getPostcode(), 'NotEmpty')
        ) {
            $errors[] = Mage::helper('customer')->__('Please enter the zip/postal code.');
        }

        if (!Zend_Validate::is($this->getCountryId(), 'NotEmpty')) {
            $errors[] = Mage::helper('customer')->__('Please enter the country.');
        }

        if ($this->getCountryModel()->getRegionCollection()->getSize()
               && !Zend_Validate::is($this->getRegionId(), 'NotEmpty')
               && Mage::helper('directory')->isRegionRequired($this->getCountryId())
        ) {
            $errors[] = Mage::helper('customer')->__('Please enter the state/province.');
        }

        if (empty($errors) || $this->getShouldIgnoreValidation()) {
            return true;
        }
        return $errors;
    }

しかし、私はそれを機能させることはできません!

私がそれを行うことができる唯一の方法は、ファイルをローカルフォルダに正確にコピーすることです。すなわち

app / code / core / Mage /Customer/Model/Address/Abstract.php

app / code / local / Mage /Customer/Model/Address/Abstract.php

そして、app / code / local / Customer /etc/にある私のconfig.xmlは..

<?xml version="1.0"?>
<config>
    <modules>
        <Telephone_Customer>
            <version>0.0.1</version>
        </Telephone_Customer>
    </modules>

    <global>
    <models>
    <telephone_customer>
        <class>Telephone_Customer_Model</class>
    </telephone_customer>
    <customer>
        <rewrite>
            <customer>Telephone_Customer_Model_Customer</customer>
        </rewrite>
    <customer>
    </models>
    </global>   
</config>

しかし、ここでは許可されていませんが、それを行う正しい方法ではありません。

他の場所で行うように、この抽象クラスをオーバーライドできますか?

助けてください。

4

1 に答える 1

-1

最後にそれを手に入れました。

アクセスできます

関数validate()

Address.phpなどの派生クラスをオーバーライドします。

つまり、オーバーライドします

app / code / core / Mage / Customer / Address.php

上記のコードで説明したのと同じ原則を使用して、ファイルをオーバーライドします。

于 2012-12-11T10:12:51.530 に答える