#magento
#magento
Вопрос:
Я пытался задать этот вопрос в битах, но с ограниченным успехом.
Я пишу пользовательский модуль. Пользовательский модуль имеет аспект конфигурации. В этой конфигурации я хочу открыть окно, содержащее поля, в которые пользователь вводит дополнительную информацию (вместо того, чтобы размещать эти поля непосредственно на экране конфигурации).
Итак, у меня есть кнопка на экране конфигурации, которая при нажатии открывает это новое окно (используя window.open javascript). Просто чтобы протестировать механизм, я поместил файл для открытия в корень моей установки Magento, и это было нормально. Но, очевидно, мне нужно будет поместить этот файл куда-нибудь еще. Поэтому вместо открытия abc.html У меня был открыт javascript / index.php/myfrontname/mycontroller / myaction (я бы предпочел не иметь index.php в моих URL-адресах, но это совсем другое дело).
Во-первых, правильно ли изменить URL-адрес из обычного html-файла на структуру frontname / controller / action?
Предполагая, что это так, я не получаю содержимое, которое я ожидал, в всплывающем окне. Я получаю страницу просмотра Magento (я использую демонстрационные данные) с битами обслуживания клиентов / мини-корзины и т.д. В левом и правом столбцах, и ничего в середине страницы. Я вообще не хочу ничего из этого на странице — я хочу показывать свой html, и только мой html.
Я использовал документы Алана Шторма в качестве исходного кода при настройке следующего, но я явно чего-то не хватает (или довольно многого!).
Мой 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:
Ваш контроллер является контроллером интерфейса, что означает, что он загружает 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 и, надеюсь, получите лучшие результаты. Если нет, дайте мне знать, и мы продолжим 🙂
Комментарии:
1. Спасибо за ваш ответ. Я изменил свой контроллер так, чтобы он расширял Mage_Adminhtml_Controller_Action и вместо того, чтобы открывать пустую страницу покупок в интерфейсе, он выводит экран панели администратора Magento. Это часть моего config.xml вы просили:
<routers> <mymodule> <use>standard</use> <args> <module>MyPackage_MyModule</module> <frontName>myfrontname</frontName> </args> </mymodule> </routers>
Приведенный выше раздел маршрутизаторов находится внутри <config><frontend>. Я вроде как заставил вещи вести себя так, как я хочу, просто получив действие контроллера для возврата моего html.2. В моем последнем комментарии я сказал, что у меня все работает, просто делая
public function moredetailsAction() { $block = new Mage_Core_Block_Text(); $block->setText(big html string); echo $block->toHtml(); }
, ну, это работает только при расширенииMage_Core_Controller_Front_Action
. Если я расширяюMage_Adminhtml_Controller_Action
, я все равно получаю экран панели администратора.3. Извините, я не заметил, что вы обновили свой первоначальный ответ. Я действительно изо всех сил пытаюсь понять, что вы имеете в виду. Добавить ли мне раздел администратора выше в мой config.xml ? И добавить ли мне его точно так, как у вас есть? Извините, я просто рву на себе волосы, пытаясь связать все эти фрагменты конфигурации вместе. Спасибо за вашу помощь.
4. Не идентичный блок, но вам нужно структурировать свой XML после этого. Тег верхнего уровня всегда есть
<config>
, но ваш следующий тег должен быть<admin>
, как в примере. Также замените свой<use>
раздел и посмотрите, улучшит ли это ситуацию.