4

我目前正在为 Magento 开发一个自定义模块。我了解包、模块和路由器的基础知识,并且我已经构建了模块的前端部分。

但是,我现在正在转向管理方面的事情。但是,我对如何将管理部分添加到路由器并让它调用相关控制器感到有些困惑。

假设我已经创建了这些路由器......

<frontend>
    <routers>
        <slider>
            <use>standard</use>
            <args>
                <module>Mypackage_Myodule</module>
                <frontName>Mymodule</frontName>
            </args>
        </slider>
    </routers> 
</frontend> 
<admin>
    <routers>
        <mymoduleadmin>
            <use>admin</use>
            <args>
                <module>Mypackage_Myodule</module>
                <frontName>Mymodule</frontName>
            </args>
        </mymoduleadmin>
    </routers>
</admin>

我认为这两个路由器都会尝试调用 controllers/IndexController.php 并因此具有相同的功能?是否可以进行设置,以便我的路由器根据它们是前端还是管理员调用不同的控制器?这甚至可能还是我需要设置一个前端模块和一个管理模块?

如果这是一个男生的问题,我很抱歉,但这让我有点困惑,实际上我只想知道设置具有前端和管理功能的自定义模块的最有效方法。

4

2 回答 2

1

根据区域(前端或 adminhtml),调度前端或 adminhtml 路由器。
因此,只要您为前端和 adminhtml 使用不同的控制器文件,前端控制器扩展自Mage_Core_Controller_Front_Action& adminhtml 扩展自Mage_Adminhtml_Controller_Action.

Frontend / Adminhtml 路由器可以定义为(只是一种语法):

<frontend>
    <routers>
        <[module]>
            <use>standard</use>
            <args>
                <module>[Namespace]_[Module]</module>
                <frontName>[module]</frontName>
            </args>
        </[module]>
    </routers>
</frontend>
<admin>
    <routers>
        <[module]>
            <use>admin</use>
            <args>
                <module>[Namespace]_[Module]</module>
                <frontName>[module]</frontName>
            </args>
        </[module]>
    </routers>
</admin>

您可以在以下位置创建前端控制器:app/code/[codePool]/[Namespace]/[Module]/controllers/
例如:

<?php
//file: app/code/local/MagePsycho/Testmodule/controllers/IndexController.php
class MagePsycho_Testmodule_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction(){

    }
}

为了从 url:http://your-magento-url/testmodule/index/index
和 adminhtml 控制器访问它: app/code/[codePool]/[Namespace]/[Module]/controllers/Adminhtml/
例如:

<?php
//file: app/code/local/MagePsycho/Testmodule/controllers/Adminhtml/IndexController.php
class MagePsycho_Testmodule_Adminhtml_IndexController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction(){

    }
}


为了从 url 访问它:(http://your-magento-url/testmodule/adminhtml_index/index
您可以看到用于分隔 adminhtml 控制器的 Adminhtml 文件夹)

希望这能给你一些信息。
谢谢

于 2012-08-03T09:38:10.127 回答
1

看看我的类似问题:自定义模块中的管理路由

我也建议使用

<admin>
 <routers>
   <adminhtml>
     <args>
       <modules>
         <modulename before="Mage_Adminhtml">Namespace_Module_Adminhtml</modulename>
       </modules>
     </args>
   </adminhtml>
 </routers>
</admin>

这将允许您避免adminhtml在路由中使用部分,因此您的模块后端 url 将具有像核心模块一样简单而干净的 url,例如admin/mymodule

于 2012-08-03T11:12:54.113 回答