Overriding Models in Magento

How to override models in Magento?

To override any model you need to make changes in two files.

  • module/etc/config.xml
  • module/model/modelName.php

Assume, Package is the name of your custom package,
Module is the name of your custom module,
CorePackage is the Package name of core Module that you want to override,
CoreModule is the core Module that you want to override

Changes in config.xml file of your module

Write this to config file of your module.
module/etc/config.xml

<?xml version="1.0"?>
<config>	
    <modules>
	<Package_Module>
	    <version>0.1.0</version>
	</Package_Module>
    </modules>
    
    <!--overriding model-->
    <global>
	<models>
	    <coreModule>
	 	<rewrite>
		    <model>Package_Module_Model_ModelName</model>
		</rewrite>
	    </coreModule>
	    <coreModule_resource>
	 	<rewrite>
		    <!-- Resource -->
		    <coreModule>Package_Module_Model_Resource_ModelName</coreModule>
		    
		    <!-- Collection -->
		    <coreModule_collection>Package_Module_Model_Resource_ModelName_Collection</coreModule_collection>
		</rewrite>
	    </coreModule_resource>
	</models>
    </global>
</config>

Changes in modelName.php file of your module/model

Write this to modelName.php file of your module.
module/model/modelName.php

<?php
class Package_Module_Model_ModelName extends CorePackage_CoreModule_Model_CoreModelName {

    //your code
}
?>

Example to demostrate how to override helper/Data.php file of Customer Module present in core Mage Package

Suppose you want to override helper/Data.php of Mage package which is a part of core file in Magento. Of course you can override any helper class in core file using this method.

Go to etc/config.xml file of your module and add the following within <global> tag.

<?xml version="1.0"?>
<config>	
    <modules>
	<syntaxpage_customer>
	    <version>0.1.0</version>
	</syntaxpage_customer>
    </modules>
    <!--overriding helper-->
    <global>
	<helpers>
	    <customer>
	 	<rewrite>
		    <data>Syntaxpage_Customer_Helper_Data</data>
		</rewrite>
	    </customer>
	</helpers>
    </global>
</config>

Add the helper that you want to override.
syntaxpage/customer/helper/Data.php

<?php
require_once 'Mage/Customer/controllers/AccountController.php';
class Syntaxpage_Customer_Helper_Data extends Mage_Customer_Helper_Data {
{
	//your code
}
?>