Magento是一个十分优秀的电子商务系统,但是有时候我们需要增加一些新的功能或者修改原有的功能,一般情况下通过自己开发的扩展模块(module)可以满足要求。如果需要修改系统的一些默认行为(如结账,注册等),不提倡直接修改Magento本身模块里的代码(修改后无法升级,因为升级后所做的修改会被升级后的文件覆盖),这时候Magento提供的rewrite机制可以满足我们的要求。
Magento中可以rewrite的对象有:Block, Controller(frontend 和admin)以及Model。
最常用的是rewrite controller,参见:Magento
重载Controller的方法。
通过rewrite控制器,可以修改系统本身模块的一些动作而又不改变原有的url。
其次是rewrite block,方法参见:
Magento中用子类替换Block
Rewrite block可以给系统原有的block类加入新的字段,方法,设置新的template等。
最后可以rewrite model,方法如下:
1. 在配置文件config.xml中加入:
<models>
<enterprise_catalogpermissions> <!--被rewrite的model标识符-->
<rewrite>
<!--被rewrite类名-->
<!--替换的全类名-->
<observer>Glamour_Glscustomer_Model_Observer</observer>
</rewrite>
</enterprise_catalogpermissions>
<customer>
<rewrite>
<session>Glamour_Glscustomer_Model_Customer_Session</session>
</rewrite>
</customer>
...
</models>
Rewrite model后,通过
Mage::getModel('enterprise_catalogpermissions/observer')
和
Mage::getModel('customer/session')
实际上获得的类是:
Glamour_Glscustomer_Model_Observer
和
Glamour_Glscustomer_Model_Customer_Session
。
可以给原有的model加入新的字段,修改或加入新的方法。