我正在尝试编辑此处生成的报告example.com/index.php/admin/sales_order/index/
。我需要在右侧的下拉菜单中添加一个新报告。
我通过url跟踪此页面到它的控制器并转储了类。
app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php indexAction()
得到了这个类Ext4mage_Html2pdf_Sales_OrderController
所以我知道它被模块覆盖了。在这种情况下,Ext4mage Html2pdf模块。
此控制器只使用
覆盖pdf方法require_once BP.'/app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php';
class Ext4mage_Html2pdf_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController{
//etc }
所以我在本地创建了我的新模块,希望在社区中覆盖它。
app/code/local/Daves/OrderModule/controllers/Sales/OrderController.php
并置于以下内容中。
require_once 'Mage'.DS.'Adminhtml'.DS.'controllers'.DS.'Sales'.DS.'OrderController.php';
require_once BP.'/app/code/community/Ext4mage/Html2pdf/controllers/Sales/OrderController.php';
class Daves_OrderModule_Sales_OrderController extends Ext4mage_Html2pdf_Sales_OrderController{
public function indexAction(){
die();
return parent::indexAction();
}
}
我的预期功能是在管理员重新加载销售/订单页面时,我会得到一个空白页面,而我没有。这意味着我的控制器没有被加载。
我的IDE显示正在扩展类,并且将die()
放入Ext4mage_Html2pdf控制器中的indexAction()
方法按预期工作。由于某种原因,它只是错过了我的控制器。
尝试使用example.com/admin/daves_ordermodule/sales_order/index
直接在浏览器中点击控制器也会抛出404。
我是否应该尝试覆盖这些块呢?
我没有在配置中创建任何时髦的<rewrite>
更新句柄,主要是因为我不确定我是否需要它们,或者它们会去哪里。据我所知,Magento从Zend中获取了xml的可怕用法,我会在这里粘贴我的配置。
app/etc/modules/Daves_OrderModule.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Daves_OrderModule>
<active>true</active>
<codePool>local</codePool>
<depends> <!-- same as in the /app/etc/Mage_All.xml -->
<Mage_Reports/>
<Mage_Adminhtml/>
<Ext4mage_Html2pdf/>
</depends>
</Daves_OrderModule>
</modules>
</config>
app/code/local/Daves/OrderModule/etc/config.xml
0.1
<global>
<blocks>
<daves_ordermodule> <!-- this is the class group and must be lowercase-->
<class>Daves_OrderModule_Block</class> <!-- this is how you access it -->
</daves_ordermodule>
</blocks>
<helpers>
<daves_ordermodule>
<class>Daves_OrderModule_Helper</class> <!-- Mage::helper('squaresphere_module/<helper>'); -->
</daves_ordermodule>
</helpers>
<models>
<daves_ordermodule>
<class>Daves_OrderModule_Model</class> <!-- Mage::getModel('squaresphere_module/<model>'); -->
</daves_ordermodule>
</models>
</global>
<!-- How to get to the module from the browser -->
<admin>
<routers>
<daves_ordermodule> <!-- My unique class group -->
<use>admin</use> <!-- which router class? -->
<args>
<module>Daves_OrderModule</module> <!-- assumes /controllers -->
<frontName>daves_ordermodule</frontName> <!-- what is on the url -->
</args>
</daves_ordermodule>
</routers>
</admin>
</config>
app/code/community/Ext4mage/Html2pdf/etc/config.xml
特定节点
<admin>
<routers>
<html2pdf>
<use>admin</use>
<args>
<module>Ext4mage_Html2pdf</module>
<frontName>html2pdf</frontName>
</args>
</html2pdf>
<emailattachments>
<args>
<modules>
<Ext4mage_Html2pdf before="Fooman_EmailAttachments">Ext4mage_Html2pdf</Ext4mage_Html2pdf>
</modules>
</args>
</emailattachments>
<adminhtml>
<args>
<modules>
<Ext4mage_Html2pdf before="Mage_Adminhtml">Ext4mage_Html2pdf</Ext4mage_Html2pdf>
</modules>
</args>
</adminhtml>
</routers>
</admin>
答案 0 :(得分:2)
假设您没有前端控制器,请按如下方式调整配置:
<!-- How to get to the module from the browser -->
<admin>
<routers>
<adminhtml> <!-- My unique class group -->
<args>
<modules>
<Daves_Om before="Ext4mage_Html2pdf">Daves_OrderModule</Daves_Om>
</modules>
</args>
</adminhtml>
</routers>
</admin>
这样做是在Mage_Adminhtml模块的正面名称下添加另一个控制器目录。来自<Daves_Om>
的值基本上映射到文本节点+“控制器”,因此app/code/(configured codepool)/Daves/OrderModule/controllers/
- 然后应用典型的路由匹配。