Come inserire un <iframe> in un pannello di amministrazione <campo>?


13

Sto creando un modulo personalizzato che viene visualizzato Google Maps nel frontend di Magento. Per ottenere quelle mappe, l'amministratore dovrebbe inserire e salvare l'URL della posizione della mappa nel Pannello di amministrazione. Funziona tutto bene. L'URL viene salvato nel database e le mappe vengono visualizzate nel frontend del negozio.

Ma ora vorrei visualizzare un'anteprima di questa mappa anche nel Pannello di amministrazione. Ciò consentirà all'amministratore di verificare facilmente se l'URL corretto è stato inserito e salvato.

Voglio visualizzarlo Preview Mapin un nuovo <field>(appena sotto il campo in cui deve essere inserito l'URL) e utilizzare un'anteprima della mappa <label>. Il modello seguente mostra ciò che sto cercando di ottenere.

inserisci qui la descrizione dell'immagine

Al mio system.xmlfile di moduli ho aggiunto il seguente codice:

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

E il mio MyNamespace/MyModule/Block/System/Config/Map.phpcontiene il seguente codice:

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

Questo rende la mappa di Google nel Pannello di amministrazione e anche il rendering nel modo corretto <group>ma non è caricato nel modo <field>desiderato. Questa è una schermata reale della situazione attuale.

inserisci qui la descrizione dell'immagine

Ho provato tutto quello che <frontend_type>mi viene in mente ....

Quindi la mia domanda è: come posso inserire un <iframe>in un pannello di amministrazione <field>? Devo aggiungere qualcosa al mio <frontend_model>?


Credo che usare la tua <frontend_model>sia davvero la strada da percorrere. All'interno di quel file dovresti essere in grado di$rendered .= '<iframe...
Tim Hallman,

Qual è il sort_ordertuo 'Map Details'campo? È inferiore a quello 20usato per il tuo 'Map Preview'?
Tim Hallman,

Risposte:


2

Con Varien_Data_Form_Element_Renderer_Interfacete hai la libertà di progettare l'intera riga come desideri. Poiché estendi Mage_Adminhtml_Block_Abstracte restituisci solo l'iframe nel suo render()metodo, questo è ciò che ottieni. Per utilizzare il layout di tabella predefinito, estendi Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Elementinvece e usa il suo toHtml()metodo predefinito dopo aver modificato l' elemento proprietà per visualizzare l'iframe.

Attualmente il rendermetodo riceverà un Varien_Data_Form_Element_Linkparametro as perché questo è ilfrontend_type quello specificato. Ma poiché non si desidera mostrare effettivamente un campo di input, è necessario modificarlo in un tipo di frontend in cui è possibile sostituire più facilmente l'output di rendering in HTML arbitrario.

Suggerisco di usare label, quindi il metodo di rendering è simile al seguente:

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

Nota che devi usare after_element_htmle lasciare valuevuoto, perché il valore di un'etichetta è sempre sfuggito, mentre puoi sempre usare HTML arbitrario inafter_element_html


0

Definire qui una classe CSS e rimuovere width = "100%".

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

esempio:

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

CSS (solo indovinando su larghezza e margini)

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

Puoi anche usare il texttipo di frontend invece di link.

Puoi trovare i diversi tipi qui .


Grazie per i vostri suggerimenti. Li ho provati, ma sfortunatamente non mi hanno aiutato. Tutto ciò che fanno è cambiare la dimensione della mappa, ma non la posizione. In qualche modo il <iframe>rendering è ancora sopra l'insieme di <fields>ma ho bisogno che sia renderizzato all'interno <table>della seconda riga (sort_order 20). Semplicemente non capisco perché il <iframe>rendering è prima (senza il <label>e in <comment>cui ho definito system.xml) e poi il <table>rendering in seguito, con una sola riga ...
ForMat

-1

Bene, per questo è possibile codificare nel file phtml nella cartella di progettazione che non è necessario prendere iframe come campo campo di testo, ecco cosa ho fatto per il dispositivo di scorrimento video

1.

foreach ($ collection come $ item) {

                    $ i = $ i + 1;
                     $ Item-> getTitle ($ i);
                     $ Item-> getUrl ($ i);
                     $ temp = $ item-> getUrl ();
                     $ ytarray = explode ("/", $ temp);
                            $ Ytendstring = fine ($ ytarray);
                            $ ytendarray = explode ("? v =", $ ytendstring);
                            $ Ytendstring = fine ($ ytendarray);
                            $ ytendarray = explode ("&", $ ytendstring);
                            $ Ytcode = $ ytendarray [0]; 
                    ?> ";?>


  1. questo è il mio codice di blocco
 $ fieldset-> addField ('url', 'text', array (
          'label' => Mage :: helper ('videoslider') -> __ ('Immetti URL video'),
          'class' => 'required-entry',
          'style' => 'larghezza: 700px;',
          'richiesto' => vero,
          'name' => 'url',
      ));

fai questo e sei pronto! apporta queste modifiche nella cartella di visualizzazione nel tuo modulo e apporta anche modifiche nella funzione di salvataggio nel controller in modo da poterlo visualizzare anche nel lato amministratore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.