自定义模块的Magento配置 - 如何使用控制器/布局等显示弹出窗口?

时间:2011-04-28 11:49:06

标签: magento

我试过点问这个问题,但收效甚微。

我正在编写自定义模块。自定义模块具有配置方面。在该配置中,我要弹出包含用户在其中输入进一步的信息字段(而不是具有直接配置屏幕上的那些字段)。

的窗口

所以我在配置屏幕上有一个按钮,如果按下该按钮,将打开这个新窗口(使用javascript的window.open)。只是为了测试机制,我把文件放在我的Magento安装的根目录中,这很好。但显然我需要将该文件放在其他地方。因此,而不是打开abc.html的,我的JavaScript开放/index.php/myfrontname/mycontroller/myaction(我宁愿没有在我的网址的index.php,但是那是另一件事完全)。

首先,将url从普通html文件更改为frontname / controller / action结构是正确的事情吗?

假设是,我没有得到弹出窗口上我期待的内容。我得到了一个Magento的页面(我使用的是演示数据)和左右列的客户服务/迷你购物车等位,页面中间没有任何内容。我根本不想在页面上显示任何内容 - 我想显示我的HTML,只显示我的HTML。

在设置以下内容时,我一直使用Alan Storm的文档作为我的来源,但我显然遗漏了一些东西(或者很多东西!)。

我的JS正在做一个window.open on“/index.php/myfrontname/moreDetails/moredetails”,以下是我认为这个问题的相关文件:

config.xml中:

<config>
    ...
    <adminhtml>
        <layout>
            <updates>
                <mymodule>
                    <file>mymodule_moredetails.xml</file>
                </mymodule>
             </updates>
        </layout>
    </adminhtml>
</config>

应用程序/代码/本地/ MyPackage的/ MyModule的/控制器/ MoreDetailsController.php:

<?php
class MyPackage_MyModule_MoreDetailsController extends Mage_Core_Controller_Front_Action
{
    public function moredetailsAction()
    {
        $this->loadLayout();   // I'm still not clear as to what layout this loads.
        $this->renderLayout();
    }
}

应用程序/设计/ adminhtml /默认/默认/布局/ mymodule_moredetails.xml:

<?xml version="1.0"?>
<layout version="0.1.0">
    <mymodule_mycontroller_myaction>
        <reference name="root">
            <block type="mymodule/adminhtml_system_config_moreDetails" name="root"/>
        </reference>
    </mymodule_mycontroller_myaction>
</layout>

应用程序/代码/本地/ MyPackage的/ MyModule的/砌块/ Adminhtml /系统/配置/ MoreDetails.php:

<?php
class Mypackage_MyModule_Block_Adminhtml_System_Config_MoreDetails extends Mage_Core_Block_Template // also tried extending Mage_Core_Block_Text
{
    protected function _prepareLayout()
    {
        parent::_prepareLayout();
        if (!$this->getTemplate()) {
            $this->setTemplate('mypackage/system/config/more_details.phtml');
        }
        return $this;
    }
}

应用程序/设计/ adminhtml /默认/默认/ mypackage的/系统/配置/ more_details.phtml:

<HTML>
    ...
</HTML>

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您的控制器是前端控制器,这意味着它正在加载前端XML文件(而不是您自己的)。首先,让控制器从Mage_Adminhtml_Controller_Action开始,而不是Mage_Core_Controller_Front_Action

接下来,请发布配置文件中为控制器设置路由的部分。


好的,将<use>standard</use>块切换为<use>admin</use>。这是adminhtml的相关块,为您提供参考点:

<admin>
    <routers>
        <adminhtml>
            <use>admin</use>
            <args>
                <module>Mage_Adminhtml</module>
                <frontName>admin</frontName>
            </args>
        </adminhtml>
    </routers>
</admin>

当你这样做时,你应该使用你的adminhtml XML布局文件,希望会有更好的结果。如果没有,请告诉我,我们将继续:)