3

我似乎无法在这个问题上找到明确的答案。您如何获得管理后端页面的网址?

例如,假设我有一个模块使用一个前端名称为mymodule的控制器。如果我打电话:

$this->getUrl('mymodule/controller/action')

我得到:

http://mydomain.com/index.php/mymodule/controller/action

这不起作用,因为它没有包含管理员名称。

我发现这个线程提到使用这个:

Mage::helper("adminhtml")->getUrl();

但是,这也不会将管理员名称附加到 URL...那么通过 adminhtml 帮助程序传递它的意义何在?该线程还说您可以使用它来获取管理员名称:

Mage::getConfig()->getNode('admin/routers/adminhtml/args/frontName');

那么我应该使用这两种方法构建正确的 URL,还是有更简单的方法来完成这个?我想必须有一个简单的方法,但我就是想不通。

谢谢 :)

4

2 回答 2

5

您确实打算通过 $this->getUrl('mymodule/controller/action') 获取 URL。然而,这种混乱正在阻止对路由系统的误解。admin 标签指定使用管理路由器,mymodule 指定在 URL 中使用的前名。基本上,您正在创建自己的前名。要使用管理员前端名称,您需要使用控制器重写来完成它。类似于以下内容:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <mymodule after="Mage_Adminhtml">Your_Mymodule</mymodule>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

这样做的目的是将路由系统配置为查看您的控制器以执行适当的操作,但前提是它在 Mage_Adminhtml 控制器上找不到相应操作。

请注意,在使用此重写时,您需要在调用 getURL 时使用“adminhtml”而不是“mymodule”,因为您的 URL 将属于 adminhtml 设置的前名。

你想出的是让你自己的前台名称正常工作的正确解决方案,只要你不关心使用管理员前台名称,它就可以正常工作。:)

于 2011-07-30T05:05:49.880 回答
1

我想我想出了这个,但是如果我弄错了,请发表评论或添加您自己的答案。我的第一个问题是我的 config.xml 配置不正确。我有<frontend>而不是<admin><routers>元素下。我也有<use>standard</use>而不是<use>admin</use>. 复制粘贴错误;)

但是,这似乎仍然没有改变返回的 URL,但这似乎并不重要。它现在正确地击中了我的控制器,即使我重定向到的 url 不包含管理员名称。所以我对此有点困惑,但无论如何,它正在工作。

于 2011-07-29T19:23:10.233 回答