如何在管理面板<field>中插入<iframe>?


13

我正在创建一个自定义模块,该模块在Magento的前端显示Google Maps。要获取这些地图,管理员必须在管理面板中输入并保存地图位置的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 Map,并且也会以适当的形式呈现,<group>但没有加载<field>到我想要的中。这是当前情况的实际屏幕截图。

在此处输入图片说明

我已经尽力<frontend_type>想了....

所以我的问题是:如何<iframe>在管理面板中插入<field>?我应该添加一些东西<frontend_model>吗?


我相信使用您<frontend_model>的确实是要走的路。在该文件中,您应该能够$rendered .= '<iframe...
Tim Hallman

什么是sort_order你的'Map Details'领域?它比20您使用的少'Map Preview'吗?
蒂姆·霍尔曼

Answers:


2

有了Varien_Data_Form_Element_Renderer_Interface自由,您可以根据需要设计整行。由于您扩展Mage_Adminhtml_Block_Abstract通过其render()方法返回iframe ,因此您将获得此结果。要使用默认的表格布局,请进行扩展Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element,并toHtml()在修改element属性以显示iframe 之后使用其默认方法。

当前,该render方法将收到一个Varien_Data_Form_Element_Linkas参数,因为这frontend_type是您指定的。但是,由于您实际上不想显示输入字段,因此应将其更改为前端类型,在此处可以更轻松地将呈现的输出替换为任意HTML。

我建议使用label,然后render方法如下所示:

public function render(Varien_Data_Form_Element_Abstract $element) {

    $url = Mage::helper('mymodule')->getMapUrl($store = null);

    $element->setData('value', '');
    $element->setData('after_element_html', '<iframe style="border: 0;" src="'.$url.'" frameborder="0" width="100%" height="270"></iframe>');

    return $this->toHtml();
}

请注意,您必须使用after_element_html并保留为value空,因为标签的值始终会转义,而您始终可以在其中使用任意HTMLafter_element_html


0

在此处定义CSS类,然后删除width =“ 100%”。

return '<iframe style="border: 0;" src="'.$url.'" frameborder="0"'
    . ' width="100%" height="270"></iframe>'
;

例:

return '<iframe class="adminmap" style="border: 0;" src="' . $url
    . '" frameborder="0" width="270" height="270"></iframe>'
;

CSS(仅猜测宽度和边距)

.adminmap { 
    width: 270px !important; 
    margin-left: 50px; 
}

您可能还想使用text前端类型而不是link

您可以在这里找到不同的类型


感谢您的建议。我尝试了它们,但不幸的是,它们没有帮助我。他们所做的只是更改地图的大小,而不更改位置。<iframe>仍然以某种方式在的集合上方渲染,<fields>但我需要将其渲染在<table>第二行的内部(sort_order 20)。我只是不明白为什么<iframe>首先渲染(没有<label><comment>我在中定义的system.xml),然后<table>又渲染只有一排的…
ForMat 2015年

-1

好吧,您可以在设计文件夹中的phtml文件中进行编码,而无需将iframe用作字段,将文本字段带到这里,这就是我对视频滑块所做的操作

1。

foreach($ collection as $ item){

                    $ i = $ i + 1;
                     $ item-> getTitle($ i);
                     $ item-> getUrl($ i);
                     $ temp = $ item-> getUrl();
                     $ ytarray = explode(“ /”,$ temp);
                            $ ytendstring = end($ ytarray);
                            $ ytendarray = explode(“?v =”,$ ytendstring);
                            $ ytendstring = end($ ytendarray);
                            $ ytendarray = explode(“&”,$ ytendstring);
                            $ ytcode = $ ytendarray [0]; 
                    ?>“;?>


  1. 这是我的区号
 $ fieldset-> addField('url','text',array(
          'label'=> Mage :: helper('videoslider')-> __('Enter Video URL'),
          'class'=>'required-entry',
          'style'=>'width:700px;',
          'required'=>是,
          '名称'=>'URL',
      ));

做到这一点,您已经准备就绪!在模块的view文件夹中进行此更改,并在controller中的saveaction中进行更改,以便也可以在管理端显示它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.