Magento конфигурация пользовательского модуля - как использовать контроллер / макет и т. Д. Для отображения всплывающего окна? - PullRequest
1 голос
/ 28 апреля 2011

Я пытался задать этот вопрос в битах, но с ограниченным успехом.

Я пишу пользовательский модуль.Пользовательский модуль имеет аспект конфигурации.В этой конфигурации я хочу открыть окно, содержащее поля, в которые пользователь вводит дополнительную информацию (а не вводить эти поля непосредственно на экране конфигурации).

Итак, у меня есть кнопка на экране конфигурации, которая, если нажата, открывает это новое окно (используя window.open javascript).Просто чтобы проверить механизм, я поместил файл, который нужно открыть, в корень моей установки Magento, и это было нормально.Но, очевидно, мне нужно будет поместить этот файл в другое место.Поэтому вместо открытия abc.html у меня был открытый файл javascript /index.php/myfrontname/mycontroller/myaction (я бы предпочел, чтобы в моих URL не было index.php, но это совсем другое).

Во-первых, правильно ли изменить URL-адрес из простого HTML-файла на структуру frontname / controller / action?

Предполагая, что это так, я не получаю ожидаемое содержимое в всплывающем окне,Я получаю страницу Magento (я использую демонстрационные данные) с битами обслуживания клиентов / мини-корзиной и т. Д. В левом и правом столбцах, а в середине страницы ничего нет.Я не хочу ничего этого на странице - я хочу показать мой HTML, и только мой HTML.

Я использовал документы Alan Storm в качестве источника при настройке следующего, но яЯ явно что-то упустил (или довольно много!).

Мой JS делает window.open для "/index.php/myfrontname/moreDetails/moredetails", и вот что я думаю, соответствующие файлыдля этой проблемы:

config.xml:

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

app / code / local / MyPackage / MyModule / controllers / 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();
    }
}

app /design / adminhtml / default / default / layout / 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>

app / code / local / MyPackage / MyModule / Block / Adminhtml / System / Config / 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;
    }
}

app / design / adminhtml / default / default / mypackage / system / config / more_details.phtml:

<HTML>
    ...
</HTML>

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 28 апреля 2011

Ваш контроллер является контроллером внешнего интерфейса, что означает, что он загружает 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>

Когда вы сделаете это, вы должны использовать XML-файл макета adminhtml, и, надеюсь, вы получите лучшие результаты. Если нет, дайте мне знать, и мы продолжим:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...