Я создаю пользовательский модуль, который отображает Google Maps в интерфейсе Magento. Чтобы получить эти карты, администратор должен будет ввести и сохранить URL-адрес местоположения карты в панели администратора. Это все отлично работает. URL сохраняется в базе данных, а карты отображаются во внешнем интерфейсе магазина.
Но теперь я хотел бы также просмотреть предварительный просмотр этой карты в панели администратора. Это позволит администратору легко проверить, правильно ли введен и сохранен URL-адрес.
Я хочу отобразить это Preview Map
в новом <field>
(чуть ниже поля, где должен быть введен URL) и использовать предварительный просмотр карты <label>
. Макет ниже показывает, чего я пытаюсь достичь.
К моему system.xml
файлу модулей я добавил следующий код:
<fields>
....
<preview translate="label comment">
<label>Map Preview</label>
<frontend_type>link</frontend_type>
<frontend_model>mymodule/system_config_map</frontend_model>
<comment>Preview of your map</comment>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</preview>
</fields>
И мой MyNamespace/MyModule/Block/System/Config/Map.php
содержит следующий код:
class MyNamespace_MyModule_Block_System_Config_Map extends Mage_Adminhtml_Block_Abstract implements Varien_Data_Form_Element_Renderer_Interface
{
public function render(Varien_Data_Form_Element_Abstract $element) {
$url = Mage::helper('mymodule')->getMapUrl($store = null);
return '<iframe style="border: 0;" src="'.$url.'" frameborder="0" width="100%" height="270"></iframe>';
}
}
Это делает карту Google в панели администратора, а также отображает в <group>
но она не загружена в то, <field>
что я хочу. Это фактический снимок экрана с текущей ситуацией.
Я перепробовал все, <frontend_type>
что мог придумать ....
Итак, мой вопрос: как я могу вставить <iframe>
в панель администратора <field>
? Должен ли я что-то добавить к своему <frontend_model>
?
<frontend_model>
действительно путь. В этом файле вы должны быть в состоянии$rendered .= '<iframe...
sort_order
ваша'Map Details'
область? Это меньше, чем20
используется для вашего'Map Preview'
?Ответы:
Со
Varien_Data_Form_Element_Renderer_Interface
свободой делайте дизайн целого ряда, как хотите. Поскольку вы расширяетеMage_Adminhtml_Block_Abstract
и возвращаете только iframe в егоrender()
методе, это то, что вы получаете. Чтобы использовать макет таблицы по умолчанию, расширьте егоMage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element
и используйтеtoHtml()
метод по умолчанию после изменения свойства элемента для отображения iframe.В настоящее время
render
метод получитVarien_Data_Form_Element_Link
параметр as, потому что это тоfrontend_type
, что вы указали. Но так как вы не хотите фактически отображать поле ввода, вы должны изменить его на тип внешнего интерфейса, где вы можете легче заменить отображаемый вывод на произвольный HTML.Я предлагаю использовать
label
, тогда метод рендеринга выглядит так:Обратите внимание, что вы должны использовать
after_element_html
и оставитьvalue
пустым, потому что значение метки всегда экранируется, в то время как вы всегда можете использовать произвольный HTML вafter_element_html
источник
Определите класс CSS здесь и удалите width = "100%".
пример:
CSS (только гадание по ширине и полям)
Вы также можете использовать
text
для внешнего интерфейса вместоlink
.Вы можете найти различные типы здесь .
источник
<iframe>
прежнему отображается выше набора,<fields>
но мне нужно, чтобы он отображался<table>
во втором ряду (sort_order 20). Я просто не понимаю, почему<iframe>
рендерится сначала (без<label>
и,<comment>
который я определил вsystem.xml
), а затем<table>
рендерится потом, только с одной строкой ...Хорошо, для этого вы можете написать код в файле phtml в папке с дизайном, вам не нужно брать iframe в качестве поля, взять текстовое поле. Вот что я сделал для видео слайдера.
1.
сделай это и все готово! внесите эти изменения в папку просмотра в вашем модуле, а также внесите изменения в saveaction в контроллере, чтобы вы могли отображать их и на стороне администратора.
источник