具有前端和管理功能的Magento模块

时间:2012-08-03 09:27:17

标签: magento module admin frontend controllers

我目前正在为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,因此具有相同的功能吗?是否可以进行设置,以便我的路由器根据它们是前端还是管理员来调用不同的控制器?这是可能的还是我需要设置前端模块和管理模块?

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

2 个答案:

答案 0 :(得分:2)

根据区域(前端或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(){

    }
}

要从网址访问它: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(){

    }
}


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

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

答案 1 :(得分:1)

查看我的类似问题:Admin route in custom modules

我也建议使用

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

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