2012-08-03 19 views
4

我目前正在为Magento定制模块。我了解包,模块和路由器的基础知识,并且构建了模块的前端部分。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> 

我相信,这两个路由器将尝试呼叫控制器/ IndexController.php,因此相同的功能?是否有可能设置的东西,所以我的路由器调用不同的控制器,取决于他们是前端还是管理员?这甚至可能或者我需要设置一个前端模块和一个管理模块?

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

回答

2

根据区域(前端或adminhtml),分派前端或adminhtml路由器。
因此,只要您对前端和adminhtml使用不同的控制器文件,前端控制器从Mage_Core_Controller_Front_Action & adminhtml延伸到Mage_Adminhtml_Controller_Action,您无需担心会将其弄乱。

前/ 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(){ 

    } 
} 


为了从网址访问:http://your-magento-url/testmodule/adminhtml_index/index
(你可以看到Adminhtml文件夹分离adminhtml控制器)

希望这给了你一些信息。
感谢

+0

对不起,我以为我有这个,但我没有。我想我失去了什么是我叫我的管理员控制器,我在哪里把它放在目录结构?正如你所说,我需要一个扩展Mage_Core_Controller_Front_Action的标准索引控制器和一个扩展Mage_Adminhtml_Controller_Action的管理控制器。 – RobDW1984 2012-08-03 10:03:06

+0

MagePsycho让我的管理控制器的目录结构看起来像/Module/controllers/Adminhtml/IndexController.php ..? – RobDW1984 2012-08-03 10:07:06

+0

是的,你是对的。另外,我更新了我的帖子。请检查一次。 – MagePsycho 2012-08-03 10:08:48

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一部分,所以你的模块后台网址将有像核心模块简单和干净的网址例如admin/mymodule

+0

同样在这里。我更喜欢这种方式来获得更干净的网址,尽管MagePsycho说的也有效。 – ivantedja 2012-08-03 16:33:48