【发布时间】:2011-06-17 16:51:14
【问题描述】:
我正在为 Magento 的管理区域开发一个模块。我正在尝试遵循 Alan Storm 在Magento admin controllers 上的教程,但似乎无法让我的控制器执行任何操作。我认为这可能与路由有关,但我不确定。它向我显示了带有 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>
我的控制器/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();
}
}
菜单项将我指向/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>
问题:我在这里做错了什么?为什么我无法访问此控制器?
最后,在 Alan 的示例代码中,URL 以模块名称开头,但我希望我的 URL 以 /admin/donor 开头,而不是 /donor。为此我需要进行哪些更改?
编辑 1 最终目标是在管理区域中有一个新选项卡,用于管理系统中的捐赠者和相关数据。当您单击某个菜单项时,我想显示一个网格并具有子选项卡和类似的东西。我不希望覆盖 adminhtml 控制器 - 尽管我正在根据 Alan's suggestion 扩展它:
与标准的唯一区别 这里的控制器是我们 延伸 Mage_Adminhtml_Controller_Action 代替 Mage_Core_Controller_Varien_Action。 Mage_Adminhtml_Controller_Action 包含用于验证的重要代码 管理会话,以及几个 在管理员中有用的方法 控制台上下文。
所以在这张图片中,单击第一个子菜单项应该调用我的控制器的索引操作并显示一个网格或其他东西来管理捐赠者。
【问题讨论】:
-
请考虑使用the module creator 为您构建所有这些配置内容。它使您免于大量样板文件,并且(从内存中)甚至具有用于带有网格的管理页面的模板。
-
感谢您的提示,下次我一定会从该提示开始 :) 或者如果我遇到其他问题..