Bagaimana cara memasukkan <iframe> dalam Panel Admin <field>?

13

Saya membuat modul khusus yang menampilkan Google Maps di bagian depan Magento. Untuk mendapatkan peta-peta itu, Admin harus memasukkan dan menyimpan URL lokasi peta di Panel Admin. Ini semua berfungsi dengan baik. URL disimpan dalam database dan peta ditampilkan di frontend toko.

Tetapi sekarang saya juga ingin menampilkan pratinjau peta ini di Panel Admin. Ini akan memungkinkan Admin untuk dengan mudah memeriksa apakah URL yang benar dimasukkan dan disimpan.

Saya ingin menampilkan ini Preview Mapdalam yang baru <field>(tepat di bawah bidang tempat URL harus dimasukkan) dan menggunakan Pratinjau Peta <label>. Maket di bawah ini menampilkan apa yang saya coba capai.

masukkan deskripsi gambar di sini

Ke system.xmlfile modul saya, saya telah menambahkan kode berikut:

<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>

Dan saya MyNamespace/MyModule/Block/System/Config/Map.phpberisi kode berikut:

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>';
    }
}

Ini membuat Google Map di Panel Admin dan juga merender dengan tepat <group>tetapi tidak dimuat dalam <field>yang saya inginkan. Ini adalah screenshot aktual dari situasi saat ini.

masukkan deskripsi gambar di sini

Saya telah mencoba setiap yang <frontend_type>saya bisa pikirkan ....

Jadi pertanyaan saya adalah: Bagaimana saya bisa memasukkan <iframe>dalam Panel Admin <field>? Haruskah saya menambahkan sesuatu ke saya <frontend_model>?

Format
sumber
Saya percaya menggunakan Anda <frontend_model>memang cara untuk pergi. Di dalam file itu Anda seharusnya bisa$rendered .= '<iframe...
Tim Hallman
Apa bidang sort_orderAnda 'Map Details'? Apakah kurang dari yang 20digunakan untuk Anda 'Map Preview'?
Tim Hallman

Jawaban:

2

Dengan Varien_Data_Form_Element_Renderer_InterfaceAnda memiliki kebebasan merancang seluruh baris seperti yang Anda inginkan. Karena Anda memperluas Mage_Adminhtml_Block_Abstractdan mengembalikan hanya iframe dalam render()metodenya, inilah yang Anda dapatkan. Untuk menggunakan tata letak tabel default, perluas Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element, dan gunakan toHtml()metode standarnya setelah memodifikasi properti elemen untuk menampilkan iframe.

Saat ini rendermetode akan menerima Varien_Data_Form_Element_Linkparameter as karena itulah frontend_type, yang Anda tentukan. Tetapi karena Anda tidak ingin benar-benar menampilkan bidang input, Anda harus mengubahnya ke jenis frontend di mana Anda dapat lebih mudah mengganti output yang diberikan ke HTML sewenang-wenang.

Saya sarankan menggunakan label, maka metode render terlihat seperti ini:

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();
}

Perhatikan bahwa Anda harus menggunakan after_element_htmldan membiarkannya valuekosong, karena nilai label selalu lolos, sementara Anda selalu dapat menggunakan HTML sewenang-wenang dalamafter_element_html

Fabian Schmengler
sumber
0

Tentukan kelas CSS di sini dan hapus lebar = "100%".

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

contoh:

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

CSS (hanya menebak lebar, dan margin)

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

Anda mungkin juga ingin menggunakan textuntuk tipe frontend bukan link.

Anda dapat menemukan berbagai jenis di sini .

B00MER
sumber
Terima kasih atas saran Anda. Saya mencobanya, tetapi sayangnya mereka tidak membantu saya. Yang mereka lakukan hanyalah mengubah ukuran peta, tetapi bukan posisinya. Entah bagaimana <iframe>masih dirender di atas himpunan <fields>tetapi saya perlu itu di-render di dalam <table>di baris kedua (sort_order 20). Saya hanya tidak mengerti mengapa <iframe>ini diterjemahkan terlebih dahulu (tanpa <label>dan <comment>yang saya definisikan dalam system.xml) dan kemudian <table>diberikan setelah itu, dengan hanya satu baris ...
ForMat
-1

Nah untuk itu Anda bisa kode dalam file phtml di folder desain Anda tidak perlu mengambil iframe sebagai bidang take textfield inilah yang telah saya lakukan untuk slider video

1.

foreach ($ collection as $ item) {

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


  1. ini adalah kode blok saya
 $ fieldset-> addField ('url', 'text', array (
          'label' => Mage :: helper ('videoslider') -> __ ('Masukkan Video URL'),
          'class' => 'wajib masuk',
          'style' => 'width: 700px;',
          'wajib' => benar,
          'name' => 'url',
      ));

lakukan ini dan Anda siap! buat perubahan ini dalam folder tampilan di modul Anda dan juga buat perubahan penyimpanan di controller sehingga Anda bisa menampilkannya di sisi admin juga.

RUSHABH SHAH
sumber