Je crée un module personnalisé qui affiche Google Maps dans le frontend de Magento. Pour obtenir ces cartes, l'administrateur doit saisir et enregistrer l'URL de l'emplacement de la carte dans le panneau d'administration. Tout fonctionne bien. L'URL est enregistrée dans la base de données et les cartes sont affichées dans le frontend du magasin.
Mais maintenant, je voudrais également afficher un aperçu de cette carte dans le panneau d'administration. Cela permettra à l'administrateur de vérifier facilement si l'URL correcte est entrée et enregistrée.
Je veux afficher cela Preview Map
dans un nouveau <field>
(juste en dessous du champ où l'URL doit être entrée) et utiliser un aperçu de la carte <label>
. La maquette ci-dessous affiche ce que j'essaie de réaliser.
À mon system.xml
fichier de modules , j'ai ajouté le code suivant:
<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>
Et mon MyNamespace/MyModule/Block/System/Config/Map.php
contient le code suivant:
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>';
}
}
Cela rend la carte Google dans le panneau d'administration et le rend également correctement, <group>
mais il n'est pas chargé dans le fichier <field>
que je veux. Il s'agit d'une capture d'écran réelle de la situation actuelle.
J'ai essayé tout <frontend_type>
ce à quoi je peux penser ...
Ma question est donc: comment puis-je insérer un <iframe>
dans un panneau d'administration <field>
? Dois-je ajouter quelque chose à mon <frontend_model>
?
<frontend_model>
c'est vraiment la voie à suivre. Dans ce fichier, vous devriez pouvoir$rendered .= '<iframe...
sort_order
ton'Map Details'
domaine? Est-ce moins que celui20
utilisé pour votre'Map Preview'
?Réponses:
Avec
Varien_Data_Form_Element_Renderer_Interface
vous avez la liberté de concevoir toute la ligne comme vous le souhaitez. Puisque vous étendezMage_Adminhtml_Block_Abstract
et renvoyez uniquement l'iframe dans sarender()
méthode, c'est ce que vous obtenez. Pour utiliser la disposition de table par défaut, étendez-la à laMage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element
place et utilisez satoHtml()
méthode par défaut après avoir modifié la propriété de l' élément pour afficher l'iframe.Actuellement, la
render
méthode recevra unVarien_Data_Form_Element_Link
paramètre as car c'est lefrontend_type
, que vous avez spécifié. Mais comme vous ne voulez pas afficher réellement un champ d'entrée, vous devez le changer en un type frontal où vous pouvez plus facilement remplacer la sortie rendue en HTML arbitraire.Je suggère d'utiliser
label
, alors la méthode de rendu ressemble à ceci:Notez que vous devez utiliser
after_element_html
et laisservalue
vide, car la valeur d'une étiquette est toujours échappée, tandis que vous pouvez toujours utiliser du HTML arbitraire dansafter_element_html
la source
Définissez une classe CSS ici et supprimez la largeur = "100%".
exemple:
CSS (juste deviner la largeur et les marges)
Vous pouvez également vouloir utiliser
text
pour le type frontal au lieu delink
.Vous pouvez trouver les différents types ici .
la source
<iframe>
rendu est toujours au-dessus de l'ensemble de<fields>
mais j'ai besoin qu'il soit rendu à l'intérieur<table>
de la deuxième ligne (sort_order 20). Je ne comprends tout simplement pas pourquoi le<iframe>
premier est rendu (sans le<label>
et<comment>
que j'ai défini danssystem.xml
) puis le<table>
est ensuite, avec une seule ligne ...Eh bien, pour cela, vous pouvez coder dans un fichier phtml dans le dossier de conception, vous n'avez pas besoin de prendre iframe comme champ, prendre textfield, voici ce que j'ai fait pour le curseur vidéo
1.
faites-le et vous êtes prêt! effectuez ces modifications dans le dossier de vue de votre module et effectuez également des modifications dans la sauvegarde dans le contrôleur afin que vous puissiez également l'afficher dans le côté administrateur.
la source