如何正确添加Magento管理路由器以避免扩展之间的冲突

如何正确添加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中提取:

我正在尝试覆盖Mage_Adminhtml_Catalog_产品,以添加功能,将一些操作添加到“管理产品”页面的网格中。我想知道如何使路由器和重定向正确,以防止与其他扩展(如增强的管理产品网格)冲突

我提出了两种选择,都有效,但我不确定其中的含义

选项1

使用标准的adminhtml/catalog_产品路由器,只需添加我的模块。这将
新的网格操作发布到
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,而不管其他模块中定义了什么重写。但是它可以工作,所以我将它留给大家