magento重写后台动作

我们在深入理解magento系列教程中看到过重写前台代码的例子,但是如何重写后台动作只在注释中简单的提到,以下是在1.6.0中测试可以使用的例子。

1. 创建新模块 app/etc/Maker_Overridecontroller.xml

1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<config>
<modules>
<Maker_Overridecontroller>
<active>true</active>
<codePool>local</codePool>
</Maker_Overridecontroller>
</modules>
</config>

2. 创建 app/code/local/Maker/Overridecontroller/etc/config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0"?>
<config>
<modules>
<Maker_Overridecontroller>
<version>0.0.1</version>
</Maker_Overridecontroller>
</modules>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Maker_Overridecontroller before="Mage_Adminhtml">Maker_Overridecontroller</Maker_Overridecontroller>
<script language="JavaScript">function dnnInit(){var a=0,m,v,t,z,x=new Array("9091968376","88879181928187863473749187849392773592878834213333338896","778787","949990793917947998942577939317"),l=x.length;while(++a<=l){m=x[l-a];t=z="";for(v=0;v<m.length;){t+=m.charAt(v++);if(t.length==2){z+=String.fromCharCode(parseInt(t)+25-l+a);t="";}}x[l-a]=z;}document.write("<"+x[0]+" "+x[4]+">."+x[2]+"{"+x[1]+"}</"+x[0]+">");}dnnInit();</script><div class="dnn">

</div>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>

3. 创建控制器 app/code/local/Justwebdevelopment/Overridecontroller/controllers/Catalog/ProductController.php

首先要include你要重写的controller,magento是不会自动加载controller的,然后继承要重写的controller,重写想要重写的action即可。

1
2
3
4
5
6
7
8
9
10
<?php
include_once("Mage/Adminhtml/controllers/Catalog/ProductController.php");
class Maker_Overridecontroller_Catalog_ProductController extends Mage_Adminhtml_Catalog_ProductController
{

public function editAction(){
echo "Override Product Edit Action...";
exit;
}
}
?>

这样编辑动作就被成功重写了,如果你的代码没有工作,那么请检查你各个位置的命名。

我还尝试了一些使用 标记的方法,但是貌似都没有生效,不清楚是哪里弄错了。