sbd*_*o85 7 php overriding magento
有很多次我想要做的就是覆盖控制器上的特定动作而不是整个事情.在大多数情况下,我只是覆盖整个控制器,但我想知道是否有更好的方法?Magento是否有办法在控制器中覆盖单个动作,而原始控制器和其他动作保持不变?
例:
class Mage_Core_AwesomeController extends Mage_Core_Controller_Front_Action {
//has url of awesome/index
public function indexAction(){
//Some Awesome code
}
//has url of awesome/torewrite
public function torewriteAction(){
//Some Awesome code
}
}
class Local_Core_AwesomeController extends Mage_Core_AwesomeController {
//has url of awesome/torewrite
public function torewriteAction(){
//Some Awesome Override code
}
}
Run Code Online (Sandbox Code Playgroud)
所以url awesome/torewrite将转到Local_Core_AwesomeController,但url awesome/index将转到Mage_Core_AwesomeController.
这个例子显然是捏造的,它只是为了展示我理论上想要的东西.因此,请不要尝试更正示例,只是演示覆盖一个动作的最佳方法.
我认为重要的是要注意我不想重写网址,只是覆盖动作.如果没有重写网址,这可能是不可能的?只是当重写url时,布局中的标签会发生变化,我宁愿保持相同.
在您Local/Core/etc/config.xml
的路由器中定义您的控制器以进行覆盖.
<config>
...
<frontend> // Use <admin> for backend routers
<routers>
<core> // <-- this is the router name
<args>
<modules>
<local_core before="Mage_Core">Local_Core</local_core>
</modules>
</args>
</core>
</routers>
</frontend>
...
</config>
Run Code Online (Sandbox Code Playgroud)
Magento的现在将检查Local/Core/controllers
之前Mage/Core/controllers
开始与URL路径core
(路由器名称).您上面的PHP类已经正确了.
这只是在这个页面的大约一半处轻轻暗示,它说:
从Magento 1.3开始,您只需将模块添加到前端路由器即可.重写不再是必要的.
归档时间: |
|
查看次数: |
4534 次 |
最近记录: |