Як вставити <iframe> на панель адміністратора <field>?


13

Я створюю спеціальний модуль, який відображає Карти Google у передній частині 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'?
Тім Холлмен

Відповіді:


2

З Varien_Data_Form_Element_Renderer_Interfaceвами ви можете створити весь ряд так, як вам захочеться. Оскільки ви розширюєте Mage_Adminhtml_Block_Abstractта повертаєте лишеrender() метод iframe у своєму методі, це те, що ви отримуєте. Щоб використовувати макет таблиці за замовчуванням, розтягніть Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Elementзамість цього і використовуйте його toHtml()метод за замовчуванням після зміни властивості елемента для відображення iframe.

В даний час renderметод отримає Varien_Data_Form_Element_Linkяк параметр, тому що це те frontend_type, що ви вказали. Але оскільки ви не хочете фактично показувати поле введення, вам слід змінити його на тип інтерфейсу, де ви можете легше замінити виведений вихід на довільний HTML.

Я пропоную використовувати label, тоді метод візуалізації виглядає приблизно так:

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порожнім, оскільки значення мітки завжди уникає, тоді як ви завжди можете використовувати довільний HTML уafter_element_html


0

Визначте тут клас CSS та видаліть ширину = "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для типу frontend замість link.

Ви можете знайти різні типи тут .


Дякуємо за ваші пропозиції. Я спробував їх, але, на жаль, вони мені не допомогли. Все, що вони роблять, - це зміни розміру карти, але не положення. Якось <iframe>все ще виводиться над набором, <fields>але мені потрібно, щоб він був відображений всередині <table>другого ряду (sort_order 20). Я просто не розумію , чому <iframe>виявляється першим (без <label>і <comment>який я визначив в system.xml) , а потім <table>виявляється згодом, тільки один ряд ...
FORMAT

-1

Ну для цього ви можете кодувати у файл phtml у папці дизайну, вам не потрібно брати iframe як поле. Візьміть текстове поле ось що я зробив для повзунка відео

1.

foreach ($ колекція як $ предмет) {

                    $ i = $ i + 1;
                     $ item-> getTitle ($ i);
                     $ item-> getUrl ($ i);
                     $ temp = $ item-> getUrl ();
                     $ ytarray = вибухнути ("/", $ temp);
                            $ ytendstring = end ($ ytarray);
                            $ ytendarray = вибухнути ("? v =", $ ytendstring);
                            $ ytendstring = end ($ ytendarray);
                            $ ytendarray = explode ("&", $ ytendstring);
                            $ ytcode = $ ytendarray [0]; 
                    ?> ";?>


  1. це мій блок-код
 $ fieldset-> addField ('url', 'text', масив (
          'label' => Mage :: helper ('videoslider') -> __ ('Введіть URL-адресу відео'),
          'class' => 'обов'язковий запис',
          'style' => 'ширина: 700px;',
          'обов'язково' => правда,
          'name' => 'URL',
      ));

зробіть це, і ви все налаштовані! внесіть ці зміни у папку перегляду у вашому модулі, а також внесіть зміни в збереження в контролері, щоб ви могли відобразити його і на стороні адміністратора.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.