magento的model類和block類的重載都不難,直接複製一個,按照相同的目錄格式放到local下就可以了。
但是重載controller和config文件就非常麻煩了。
關於重載普通的controller可以參照這篇官方wiki文章
www.magentocommerce.com/wiki/how_to_overload_a_controller
而重載adminhtml的controller就最好用我的這種方法
例如重載adminhtml裏sales/order裏的controller,我是這樣做的。
首先要注意的是,所有文件夾和文件的名字,都是大小寫敏感的,否則在linux環境下會失效。
1.先創建自己的module,例如名字叫xxx,命名空間叫yyy。新建local下的yyy/xxx文件夾,裏面新建一個etc文件夾,和controllers文件夾。
目錄結構是
app/local/yyy/xxx/controllers
和
app/local/yyy/xxx/etc
2.在app/etc/Modules裏新建一個叫yyy_All.xml的文件.內容填
<?xml version="1.0" encoding="UTF-8"?> <config> <modules> <yyy_xxx> <active>true</active> <codePool>local</codePool> </yyy_xxx> </modules> </config>
3.在app/local/yyy/xxx/etc裏新建一個名字叫config.xml的文件,內容填
<?xml version="1.0" encoding="UTF-8"?> <config> <modules> <yyy_xxx> <version>0.1.0</version> </yyy_xxx> </modules> <admin> <routers> <adminhtml> <args> <modules> <yyy_xxx before="Mage_Adminhtml">yyy_xxx</yyy_xxx> </modules> </args> </adminhtml> </routers> </admin> </config>
4.在app/local/yyy/xxx/controllers裏,按照要重載的controller的目錄結構,放置同名的controller,例如我要重載sales/order/createcontroller,我就弄成這樣的目錄結構並新建php文件如下
app/local/yyy/xxx/controllers/Sales/Order/CreateController.php
5.controll類文件裏的內容,直接extend要重載的controller文件就可以了。例如
include("Mage/Adminhtml/controllers/Sales/Order/CreateController.php");
class yyy_xxx_Sales_Order_CreateController extends Mage_Adminhtml_Sales_Order_CreateController
{
}
最後,刪除var/cache裏的東西,就生效的了。