如何正确添加Magento管理路由器以避免扩展之间的冲突
我正在尝试覆盖Mage_Adminhtml_Catalog_产品,以添加功能,将一些操作添加到“管理产品”页面的网格中。我想知道如何使路由器和重定向正确,以防止与其他扩展(如增强的管理产品网格)冲突 我提出了两种选择,都有效,但我不确定其中的含义 选项1 使用标准的adminhtml/catalog_产品路由器,只需添加我的模块。这将如何正确添加Magento管理路由器以避免扩展之间的冲突,magento,magento-1.7,Magento,Magento 1.7,我正在尝试覆盖Mage_Adminhtml_Catalog_产品,以添加功能,将一些操作添加到“管理产品”页面的网格中。我想知道如何使路由器和重定向正确,以防止与其他扩展(如增强的管理产品网格)冲突 我提出了两种选择,都有效,但我不确定其中的含义 选项1 使用标准的adminhtml/catalog_产品路由器,只需添加我的模块。这将将新的网格操作发布到www.mysite.com/index.php/admin/catalog\u product/example 从config.xml中提取:
将新的网格操作发布到www.mysite.com/index.php/admin/catalog\u product/example
从config.xml
中提取:
<config>
...
<admin>
<routers>
<adminhtml>
<args>
<modules>
<mymodule before="Mage_Adminhtml">MyCompany_MyModule</mymodule>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
<config>
...
<admin>
<routers>
<myroute>
<use>admin</use>
<args>
<module>MyCompany_MyModule</module>
<frontName>myroute</frontName>
</args>
</myroute>
</routers>
</admin>
</config>
请注意,adminhtml
被指定为$block->getUrl()
语句的第一部分。使用*/*/example
,模块将无法与“增强的管理产品网格”一起工作,因为它将发布到www.mysite.com/index.php/enhancedgrid/catalog_Product/example
——该网格不存在。(我想所有模块都会出现这个问题……重写路由?)
选项2
将新路由添加到我的模块。这将将新的网格操作发布到www.mysite.com/index.php/myrouter/catalog\u product/example
从config.xml
中提取:
<config>
...
<admin>
<routers>
<adminhtml>
<args>
<modules>
<mymodule before="Mage_Adminhtml">MyCompany_MyModule</mymodule>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
<config>
...
<admin>
<routers>
<myroute>
<use>admin</use>
<args>
<module>MyCompany_MyModule</module>
<frontName>myroute</frontName>
</args>
</myroute>
</routers>
</admin>
</config>
请注意$block->getUrl()
语句中的差异
问题
哪些选项可以确保与其他扩展更好的兼容性?还是有更好的办法
一旦操作被处理,我将重定向到控制器类中的何处?这是我的简易控制器:
class MyCompany_MyModule_Catalog_ProductController
extends Mage_Adminhtml_Catalog_ProductController {
public function exampleAction() {
... do stuff ...
$this->_redirect('*/*/index');
}
}
假设也安装了增强的管理产品网格。使用选项1,*/*/index
重定向到www.mysite.com/index.php/admin/catalog\u product/index
。虽然这很好,但我觉得正确的url应该是www.mysite.com/index.php/enhancedgrid/catalog\u product/index
。但如果我不知道安装了哪些其他扩展,我不知道这是否真的重要,以及如何做到这一点
使用选项2,*/*/index
重定向到www.mysite.com/index.php/myrouter/catalog\u product/index
,由于MyCompany\u MyModule\u catalog\u ProductController没有indexAction(),因此会导致一个空页面。因此,我必须使用adminhtml/*/index
,它会重定向到www.mysite.com/index.php/admin/catalog\u product/index
——与上面的疑问相同
感谢所有花时间阅读这个冗长问题的人我做了一些研究,并试图自己回答这些问题,至少对于第一个问题,我现在非常自信:
选项1(使用标准admin frontname(adminhtml路由器)而不是定义自定义路由器)是首选方式,如Alan Storm所述:
“尽管可以为管理路由器定义多个前端名称,但我建议不要这样做(尽管如此)。管理控制台应用程序的某些部分采用了admin的前端名称。虽然页面将加载并使用其他管理前端名称,但某些功能(如富文本编辑器的媒体库集成),可能不会
虽然可以解决这些特殊情况,但最好使用管理员前端名称/adminhtml配置路由器节点,然后注意控制器名称和Mage_adminhtml模块控制器名称之间没有重叠。”
我仍然不明白为什么*/*/index
可以工作,它会重定向到www.mysite.com/index.php/admin/catalog_product/index,而不管其他模块中定义了什么重写。但是它可以工作,所以我将它留给大家