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 Map
in 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.
Zu meiner Moduldatei habe system.xml
ich 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.php
enthä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.
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>
?
<frontend_model>
ist in der Tat der richtige Weg. In dieser Datei sollten Sie in der Lage sein$rendered .= '<iframe...
sort_order
für ein'Map Details'
Gebiet? Ist es weniger als das20
für Sie verwendete'Map Preview'
?Antworten:
Mit
Varien_Data_Form_Element_Renderer_Interface
Ihnen haben Sie die Freiheit, die gesamte Reihe nach Ihren Wünschen zu gestalten. Da Sie nur den iframe in seiner Methode erweiternMage_Adminhtml_Block_Abstract
und 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_Element
toHtml()
Derzeit
render
erhält die Methode einenVarien_Data_Form_Element_Link
as-Parameter, da dies der vonfrontend_type
Ihnen 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:Beachten Sie, dass Sie verwenden
after_element_html
undvalue
leer lassen müssen, da der Wert einer Beschriftung immer maskiert wird, während Sie in HTML immer beliebige Zeichen verwenden könnenafter_element_html
quelle
Definieren Sie hier eine CSS-Klasse und entfernen Sie die width = "100%".
Beispiel:
CSS (nur Vermutung der Breite und der Ränder)
Möglicherweise möchten Sie auch
text
für den Frontend-Typ verwendenlink
.Die verschiedenen Typen finden Sie hier .
quelle
<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 habesystem.xml
) und danach das<table>
mit nur einer Zeile ...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.
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.
quelle