我们在深入理解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; } } ?>
|
这样编辑动作就被成功重写了,如果你的代码没有工作,那么请检查你各个位置的命名。
我还尝试了一些使用标记的方法,但是貌似都没有生效,不清楚是哪里弄错了。