重载Magento里adminhtml的controller
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的文件.内容填
1
2
3
4
5
6
7
8
9 <?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的文件,内容填
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <?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文件就可以了。例如
1
2
3
4 include("Mage/Adminhtml/controllers/Sales/Order/CreateController.php");
class yyy_xxx_Sales_Order_CreateController extends Mage_Adminhtml_Sales_Order_CreateController
{
}
最后,删除var/cache里的东西,就生效的了。
近期评论