如何覆盖magento enterprise或magento 1.8中的rate.php?

时间:2014-04-23 11:40:05

标签: magento

我需要更改app \ code \ core \ Mage \ Tax \ Model \ Calculation \ Rate.php

if (!is_numeric($this->getRate()) || $this->getRate() <= 0) {

if (!is_numeric($this->getRate()) || $this->getRate() < 0) {

所以我想覆盖这个文件而不是更改核心文件夹。

请帮忙......

2 个答案:

答案 0 :(得分:2)

首先,您需要在自定义模块的config.xml文件中重写核心Magento模型:

<config>
    <modules>
        <MyPackage_MyModule>
            <version>0.0.1</version>
        </MyPackage_MyModule>
    </modules>

    <global>
        <models>
            <mypackage_mymodule>
                <class>MyPackage_MyModule_Model</class>
            </mypackage_mymodule>
            <tax>
                <rewrite>
               <calculation_rate>MyPackage_MyModule_Model_Calculation_Rate</calculation_rate>  
                </rewrite>
            </tax>
        </models>
    </global>
</config>

您需要在此处创建新的Rate.php文件:MyPackage / MyModule / Model / Calculation / Rate.php并扩展核心Magento Tax Rate模型。最后,您应该添加所需的方法。您可以测试重写是否成功,如下所示:

class MyPackage_MyModule_Model_Calculation_Rate extends Mage_Tax_Model_Calculation_Rate {

     /**
     * Prepare location settings and tax postcode before save rate
     *
     * @return Mage_Tax_Model_Calculation_Rate
     */

    protected function _beforeSave()
    { 
        die("it works!");
    }
}

现在,当您的新方法有效时,您可以添加所需的代码。

希望这有帮助! :)

答案 1 :(得分:1)

只需将自己的文件Rate.php添加到文件夹./app/code/local/Mage/Tax/Model/Calculation/Rate.php

即可

如果文件存在,Magento将检查此文件夹,并在从核心加载之前对它们进行优先级排序,这意味着将不会加载文件./app/code/core/Mage/Tax/Model/Calculation/Rate.php文件。

说明:

ROOT/app/core/ magento files (never do any changes)    
ROOT/app/community/ installed modules etc ...   
ROOT/app/local/ your own changes only for this installation