我正在为Magento的管理区域开发一个模块.我正在尝试关注Magento管理控制器上的Alan Storm的教程,但似乎无法让我的控制器做任何事情.我认为它可能与路由有关,但我不确定.它向我展示了带有404错误的前端模板.
(注意:我在此处已包含所有相关代码.实际问题位于最底层.)
该模块名为Mynamespace_Donor,位于app/code/local/Mynamespace/Donor /中.
我的etc/config.xml看起来像这样:
<?xml version="1.0"?>
<config>
<modules>
<Mynamespace_Donor>
<version>0.1.0</version>
</Mynamespace_Donor>
</modules>
<global>
<helpers>
<donor>
<class>Mynamespace_Donor_Helper</class>
</donor>
</helpers>
<resources>
<donor_setup>
<setup>
<module>Mynamespace_Donor</module>
</setup>
</donor_setup>
</resources>
</global>
<admin>
<routers>
<donor>
<use>admin</use>
<args>
<module>Mynamespace_Donor</module>
<frontname>donor</frontname>
</args>
</donor>
</routers>
</admin>
<adminhtml>
<menu>
<donor translate="title" module="donor">
<title>Donor</title>
<sort_order>42</sort_order>
<children>
<manage_donors module="donor">
<title>Manage Donors</title>
<action>donor/index/index</action>
</manage_donors>
</children>
</donor>
</menu>
</adminhtml>
</config>
Run Code Online (Sandbox Code Playgroud)
而我的controllers/IndexController.php看起来像这样:
<?php
class Mynamespace_Donor_IndexController extends Mage_Adminhtml_Controller_Action
{
public function indexAction()
{
$this->loadLayout();
//create a text block with the name of "example-block"
$block = $this->getLayout()
->createBlock('core/text', 'example-block')
->setText('<h1>This is a text block</h1>');
$this->_addContent($block);
$this->renderLayout();
}
}
Run Code Online (Sandbox Code Playgroud)
菜单项指向我/index.php/donor/index/index/key/e98a...显示404页面.当我尝试直接去/donor,/index.php/donor,/index.php/donor/index,等我仍然得到404错误.
如果我<helpers>从配置中删除,Magento抱怨它找不到它.如果我删除该<adminhtml>部分,它会停止抱怨,即使我仍然有我的<admin><routers>部分(不知道路由的东西是否需要帮助或如果这甚至相关).
我也试过添加这个块<adminhtml>,但是当我尝试编辑角色权限时,我得到一个带有此错误的白页:Fatal error: Class 'Mage_Mynamespace_Donor_Helper_Data' not found in /home/mysite/public_html/magento_dev_1_10/app/Mage.php on line 520
<acl>
<resources>
<admin>
<children>
<donor translate="title" module="Mynamespace_Donor">
<title>Donors</title>
<sort_order>60</sort_order>
<children>
<manage_donors>
<title>Manage Donors</title>
</manage_donors>
</children>
</donor>
</children>
</admin>
</resources>
</acl>
Run Code Online (Sandbox Code Playgroud)
问题:我在这里做错了什么?为什么我无法访问此控制器?
最后,在Alan的示例代码中,URL以模块名称开头,但我希望我的开头/admin/donor而不是/donor.我需要做些什么改变?
编辑1 最终目标是在管理区域中有一个新选项卡,用于管理系统中的捐赠者和相关数据.当你点击一些菜单项时,我想显示一个网格,并有子标签和类似的东西.我不打算覆盖adminhtml控制器 - 虽然我根据Alan的建议扩展它:
与标准控制器的唯一区别在于我们正在扩展Mage_Adminhtml_Controller_Action而不是Mage_Core_Controller_Varien_Action.Mage_Adminhtml_Controller_Action包含用于验证管理会话的重要代码,以及在管理控制台上下文中有用的几种方法.
因此,在此图片中,单击第一个子菜单项应调用我的控制器的索引操作并显示网格或管理捐赠者的内容.

尝试替换:
<frontname>donor</frontname>
Run Code Online (Sandbox Code Playgroud)
用:
<frontName>donor</frontName>
Run Code Online (Sandbox Code Playgroud)
这将解决您的404错误.
<config>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<mynamespace_donor before="Mage_Adminhtml">Mynamespace_Donor</mynamespace_donor>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
Run Code Online (Sandbox Code Playgroud)
在config.xml中尝试以上操作
更多细节:
http://prattski.com/2010/06/24/magento-overriding-core-files-blocks-models-resources-controllers/