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 Map
dalam 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.
Ke system.xml
file 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.php
berisi 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.
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>
?
<frontend_model>
memang cara untuk pergi. Di dalam file itu Anda seharusnya bisa$rendered .= '<iframe...
sort_order
Anda'Map Details'
? Apakah kurang dari yang20
digunakan untuk Anda'Map Preview'
?Jawaban:
Dengan
Varien_Data_Form_Element_Renderer_Interface
Anda memiliki kebebasan merancang seluruh baris seperti yang Anda inginkan. Karena Anda memperluasMage_Adminhtml_Block_Abstract
dan mengembalikan hanya iframe dalamrender()
metodenya, inilah yang Anda dapatkan. Untuk menggunakan tata letak tabel default, perluasMage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element
, dan gunakantoHtml()
metode standarnya setelah memodifikasi properti elemen untuk menampilkan iframe.Saat ini
render
metode akan menerimaVarien_Data_Form_Element_Link
parameter as karena itulahfrontend_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:Perhatikan bahwa Anda harus menggunakan
after_element_html
dan membiarkannyavalue
kosong, karena nilai label selalu lolos, sementara Anda selalu dapat menggunakan HTML sewenang-wenang dalamafter_element_html
sumber
Tentukan kelas CSS di sini dan hapus lebar = "100%".
contoh:
CSS (hanya menebak lebar, dan margin)
Anda mungkin juga ingin menggunakan
text
untuk tipe frontend bukanlink
.Anda dapat menemukan berbagai jenis di sini .
sumber
<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 dalamsystem.xml
) dan kemudian<table>
diberikan setelah itu, dengan hanya satu baris ...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.
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.
sumber