วิธีแทรก <iframe> ในแผงผู้ดูแลระบบ <field>


13

ฉันกำลังสร้างโมดูลที่กำหนดเองซึ่งแสดง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 Map ในแผงการดูแลระบบและแสดงผลอย่างเหมาะสม<group>แต่ไม่ได้โหลดตาม<field>ที่ฉันต้องการ นี่เป็นภาพหน้าจอจริงของสถานการณ์ปัจจุบัน

ป้อนคำอธิบายรูปภาพที่นี่

ฉันลองทุกอย่างที่<frontend_type>ฉันนึกได้ ....

ดังนั้นคำถามของฉันคือฉันจะแทรก<iframe>ในแผงผู้ดูแลระบบได้<field>อย่างไร ฉันควรเพิ่มบางสิ่งบางอย่างในของฉัน<frontend_model>?


ฉันเชื่อว่าการใช้ของคุณ<frontend_model>เป็นวิธีที่จะไป ภายในไฟล์นั้นคุณควรจะสามารถ$rendered .= '<iframe...
ทิมฮอลแมน

อะไรคือสิ่งsort_orderที่คุณ'Map Details'ฟิลด์? มันน้อยกว่าที่20ใช้สำหรับคุณ'Map Preview'หรือไม่?
Tim Hallman

คำตอบ:


2

เมื่อ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พารามิเตอร์เป็นเพราะนั่นคือสิ่ง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 ที่นี่และลบ 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; 
}

นอกจากนี้คุณยังอาจต้องการที่จะใช้สำหรับประเภทส่วนหน้าแทนtextlink

คุณสามารถค้นหาประเภทที่แตกต่างกันที่นี่


ขอบคุณสำหรับคำแนะนำของคุณ ฉันลองพวกเขา แต่น่าเสียดายที่พวกเขาไม่ได้ช่วยฉัน สิ่งที่พวกเขาทำคือเปลี่ยนขนาดของแผนที่ แต่ไม่ใช่ตำแหน่ง ยังไงก็เถอะ<iframe>ก็ยังคงแสดงอยู่เหนือชุด<fields>แต่ฉันต้องการมันจะแสดงผลภายใน<table>ในในแถวที่สอง (sort_order 20) ฉันไม่เข้าใจว่าทำไมการ<iframe>แสดงผลครั้งแรก (โดยไม่ต้อง<label>และ<comment>ที่ฉันกำหนดไว้ในsystem.xml) และจากนั้น<table>จะมีการแสดงผลในภายหลังโดยมีเพียงหนึ่งแถว ...
ForMat

-1

สำหรับการที่คุณสามารถโค้ดในไฟล์ phtml ในโฟลเดอร์การออกแบบคุณไม่จำเป็นต้องใช้ iframe เป็นฟิลด์ใช้ textfield นี่คือสิ่งที่ฉันได้ทำกับตัวเลื่อนวิดีโอ

1

foreach ($ collection เป็น $ item) {

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


  1. นี่คือรหัสบล็อกของฉัน
 $ fieldset-> addField ('url', 'text', อาร์เรย์ (
          'label' => Mage :: helper ('videoslider') -> __ ('ป้อน URL วิดีโอ'),
          'class' => 'required-entry',
          'style' => 'width: 700px;',
          'ต้องใช้' => จริง
          'name' => 'url',
      ));

ทำสิ่งนี้และคุณพร้อมแล้ว! ทำการเปลี่ยนแปลงในโฟลเดอร์มุมมองในโมดูลของคุณและทำการเปลี่ยนแปลงใน saveaction ในคอนโทรลเลอร์เพื่อให้คุณสามารถแสดงในด้านผู้ดูแลระบบได้เช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.