व्यवस्थापक पैनल <फ़ील्ड> में <iframe> कैसे सम्मिलित करें?


13

मैं एक कस्टम मॉड्यूल बना रहा हूं, जो Magento के सामने Google मैप्स प्रदर्शित करता है । उन मानचित्रों को प्राप्त करने के लिए व्यवस्थापक को व्यवस्थापक पैनल में मानचित्र स्थान का 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आप स्वतंत्रता है पूरी पंक्ति डिजाइन के रूप में आप चाहते हैं। चूंकि आप अपनी विधि में केवल iframe का विस्तार करते हैं Mage_Adminhtml_Block_Abstractऔर वापस करते हैं , यही आपको मिलता है। डिफ़ॉल्ट तालिका लेआउट का उपयोग करने के लिए, इसके बजाय का विस्तार करें , और iframe प्रदर्शित करने के लिए तत्व गुण को संशोधित करने के बाद इसकी डिफ़ॉल्ट विधि का उपयोग करें ।render()Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_ElementtoHtml()

वर्तमान में renderविधि को एक Varien_Data_Form_Element_Linkपैरामीटर के रूप में प्राप्त किया जाएगा क्योंकि यह वह है frontend_type, जिसे आपने निर्दिष्ट किया है। लेकिन जब से आप वास्तव में एक इनपुट फ़ील्ड नहीं दिखाना चाहते हैं, तो आपको इसे एक फ्रंटएंड प्रकार में बदलना चाहिए, जहां आप HTML को मनमाने ढंग से 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इसके बजाय फ्रंटएंड प्रकार के लिए उपयोग करना चाह सकते हैं link

आप यहाँ विभिन्न प्रकार पा सकते हैं ।


आपके सुझाव के लिए धन्यवाद। मैंने उनकी कोशिश की, लेकिन दुर्भाग्य से उन्होंने मेरी मदद नहीं की। वे सब करते हैं नक्शे का आकार बदलते हैं, लेकिन स्थिति नहीं। किसी तरह <iframe>अभी भी सेट के ऊपर प्रदान किया गया है, <fields>लेकिन मैं इसे <table>दूसरी पंक्ति के अंदर प्रदान करने की आवश्यकता है (Sort_order 20)। मुझे अभी समझ में नहीं आया कि <iframe>पहले (बिना <label>और <comment>जिसे मैंने परिभाषित किया है system.xml) का प्रतिपादन क्यों किया गया है और फिर <table>बाद में केवल एक पंक्ति के साथ इसका प्रतिपादन किया गया है ...
ForMat

-1

इसके लिए आप डिज़ाइन फ़ोल्डर में phtml फ़ाइल में कोड कर सकते हैं, आपको iframe लेने की आवश्यकता नहीं है क्योंकि एक फ़ील्ड टेक्स्टफ़ील्ड लेती है यहाँ मैंने वीडियो स्लाइडर के लिए क्या किया है

1।

foreach ($ आइटम के रूप में $ संग्रह) {

                    $ i = $ i + 1;
                     $ आइटम,> getTitle (i $);
                     $ आइटम,> getUrl (i $);
                     $ अस्थायी = $ आइटम-> getUrl ();
                     $ ytarray = विस्फोट ("/", $ अस्थायी);
                            $ Ytendstring = अंत ($ ytarray);
                            $ ytendarray = विस्फोट ("? v =", $ ytendstring);
                            $ Ytendstring = अंत ($ ytendarray);
                            $ ytendarray = विस्फोट ("&", $ ytendstring);
                            $ Ytcode = $ ytendarray [0]; 
                    ?> ";?>


  1. यह मेरा ब्लॉक कोड है
 $ फ़ील्डसेट-> addField ('url', 'text', array ()
          'लेबल' => दाना :: सहायक ('वीडियोसलाइडर') -> __ ('वीडियो URL दर्ज करें'),
          'वर्ग' => 'आवश्यक-प्रविष्टि',
          'शैली' => 'चौड़ाई: 700px;')
          'आवश्यक' => सत्य,
          'name' => 'url',
      ));

यह करो और तुम सब सेट हो गए! अपने मॉड्यूल में दृश्य फ़ोल्डर में यह परिवर्तन करें और नियंत्रक में विचलन में भी परिवर्तन करें ताकि आप इसे व्यवस्थापक पक्ष में भी प्रदर्शित कर सकें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.