Wie füge ich einen <iframe> in ein Admin Panel <Feld> ein?


13

Ich erstelle ein benutzerdefiniertes Modul, das Google Maps im Frontend von Magento anzeigt . Um diese Karten zu erhalten, muss der Administrator die URL des Kartenstandorts im Admin-Bereich eingeben und speichern. Das alles funktioniert gut. Die URL wird in der Datenbank gespeichert und die Karten werden im Frontend des Geschäfts angezeigt.

Jetzt möchte ich aber auch eine Vorschau dieser Karte im Admin-Panel anzeigen. Auf diese Weise kann der Administrator auf einfache Weise überprüfen, ob die richtige URL eingegeben und gespeichert wurde.

Ich möchte dies Preview Mapin einem neuen <field>Feld (direkt unter dem Feld, in dem die URL eingegeben werden soll) anzeigen und eine Kartenvorschau verwenden <label>. Das folgende Modell zeigt, was ich erreichen möchte.

Bildbeschreibung hier eingeben

Zu meiner Moduldatei habe system.xmlich den folgenden Code hinzugefügt:

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

Und meine MyNamespace/MyModule/Block/System/Config/Map.phpenthält den folgenden Code:

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

Dadurch wird Google Map im Admin-Bereich gerendert und es wird auch im richtigen Format gerendert, <group>aber es wird nicht in das <field>gewünschte Format geladen . Dies ist ein Screenshot der aktuellen Situation.

Bildbeschreibung hier eingeben

Ich habe alles versucht, was <frontend_type>mir einfällt ...

Meine Frage lautet also: Wie kann ich eine <iframe>in ein Admin-Panel einfügen <field>? Soll ich etwas hinzufügen <frontend_model>?


Ich glaube, Sie zu benutzen, <frontend_model>ist in der Tat der richtige Weg. In dieser Datei sollten Sie in der Lage sein$rendered .= '<iframe...
Tim Hallman

Was ist das sort_orderfür ein 'Map Details'Gebiet? Ist es weniger als das 20für Sie verwendete 'Map Preview'?
Tim Hallman

Antworten:


2

Mit Varien_Data_Form_Element_Renderer_InterfaceIhnen haben Sie die Freiheit, die gesamte Reihe nach Ihren Wünschen zu gestalten. Da Sie nur den iframe in seiner Methode erweitern Mage_Adminhtml_Block_Abstractund zurückgeben , erhalten Sie Folgendes. Wenn Sie das Standardtabellenlayout verwenden möchten, erweitern Sie es und verwenden Sie die Standardmethode , nachdem Sie die Elementeigenschaft geändert haben, um den Iframe anzuzeigen.render()Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_ElementtoHtml()

Derzeit rendererhält die Methode einen Varien_Data_Form_Element_Linkas-Parameter, da dies der von frontend_typeIhnen angegebene ist. Da Sie ein Eingabefeld jedoch nicht wirklich anzeigen möchten, sollten Sie es in einen Frontend-Typ ändern, mit dem Sie die gerenderte Ausgabe einfacher durch willkürliches HTML ersetzen können.

Ich schlage vor, mit label, dann sieht die Render-Methode so aus:

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

Beachten Sie, dass Sie verwenden after_element_htmlund valueleer lassen müssen, da der Wert einer Beschriftung immer maskiert wird, während Sie in HTML immer beliebige Zeichen verwenden könnenafter_element_html


0

Definieren Sie hier eine CSS-Klasse und entfernen Sie die width = "100%".

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

Beispiel:

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

CSS (nur Vermutung der Breite und der Ränder)

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

Möglicherweise möchten Sie auch textfür den Frontend-Typ verwenden link.

Die verschiedenen Typen finden Sie hier .


Vielen Dank für Ihre Anregungen. Ich habe es versucht, aber leider haben sie mir nicht geholfen. Sie ändern lediglich die Größe der Karte, nicht jedoch die Position. Irgendwie wird das <iframe>immer noch über der Menge von gerendert, <fields>aber ich muss es <table>in der zweiten Zeile (sort_order 20) rendern. Ich verstehe nur nicht, warum das <iframe>zuerst gerendert wird (ohne das <label>und in <comment>dem ich es definiert habe system.xml) und danach das <table>mit nur einer Zeile ...
ForMat

-1

Nun, dafür können Sie Code in der HTML-Datei im Design-Ordner, den Sie nicht brauchen, um Iframe als Feld zu nehmen

1.

foreach ($ collection als $ item) {

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


  1. Das ist mein Blockcode
 $ fieldset-> addField ('url', 'text', array (
          'label' => Mage :: helper ('videoslider') -> __ ('Video-URL eingeben'),
          'class' => 'required-entry',
          'style' => 'width: 700px;',
          'Erforderlich' => wahr,
          'name' => 'url',
      ));

Tun Sie dies und Sie sind fertig! Nehmen Sie diese Änderungen im Ansichtsordner in Ihrem Modul vor und nehmen Sie Änderungen im Speicher des Controllers vor, damit Sie sie auch auf der Administratorseite anzeigen können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.