Estoy creando un módulo personalizado que muestra Google Maps en la interfaz de Magento. Para obtener esos mapas, el administrador tendría que ingresar y guardar la URL de la ubicación del mapa en el panel de administración. Todo esto funciona bien. La URL se está guardando en la base de datos y los mapas se muestran en la interfaz de la tienda.
Pero ahora también me gustaría mostrar una vista previa de este mapa en el Panel de administración. Esto permitirá que el administrador verifique fácilmente si se ingresó y guardó la URL correcta.
Quiero mostrar esto Preview Map
en una nueva <field>
(justo debajo del campo donde se debe ingresar la URL) y usar una Vista previa del mapa <label>
. La maqueta a continuación muestra lo que estoy tratando de lograr.
A mi system.xml
archivo de módulos he agregado el siguiente código:
<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>
Y mi MyNamespace/MyModule/Block/System/Config/Map.php
contiene el siguiente código:
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>';
}
}
Esto representa el mapa de Google en el Panel de administración y también se muestra en el correcto, <group>
pero no se carga en el <field>
que quiero. Esta es una captura de pantalla real de la situación actual.
He intentado todo lo <frontend_type>
que puedo pensar ...
Entonces mi pregunta es: ¿Cómo puedo insertar un <iframe>
en un Panel de administración <field>
? ¿Debo agregar algo a mi <frontend_model>
?
<frontend_model>
es el camino a seguir. Dentro de ese archivo deberías poder$rendered .= '<iframe...
sort_order
de su'Map Details'
campo? ¿Es menos que el20
usado para tu'Map Preview'
?Respuestas:
Con
Varien_Data_Form_Element_Renderer_Interface
usted tiene la libertad de diseñar toda la fila como desee. Como extiendeMage_Adminhtml_Block_Abstract
y devuelve solo el iframe en surender()
método, esto es lo que obtiene. Para usar el diseño de tabla predeterminado, extienda en suMage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element
lugar y use sutoHtml()
método predeterminado después de modificar la propiedad del elemento para mostrar el iframe.Actualmente, el
render
método recibirá unVarien_Data_Form_Element_Link
parámetro como ese porque es elfrontend_type
que especificó. Pero como no desea mostrar realmente un campo de entrada, debe cambiarlo a un tipo de interfaz donde pueda reemplazar más fácilmente la salida renderizada a HTML arbitrario.Sugiero usar
label
, entonces el método de representación se ve así:Tenga en cuenta que debe usar
after_element_html
y dejar envalue
blanco, porque el valor de una etiqueta siempre se escapa, mientras que siempre puede usar HTML arbitrario enafter_element_html
fuente
Defina una clase CSS aquí y elimine el ancho = "100%".
ejemplo:
CSS (solo adivinando el ancho y los márgenes)
También es posible que desee utilizar
text
para el tipo de interfaz en lugar delink
.Puedes encontrar los diferentes tipos aquí .
fuente
<iframe>
todavía se representa por encima del conjunto de,<fields>
pero necesito que se represente dentro<table>
de la segunda fila (sort_order 20). Simplemente no entiendo por qué<iframe>
se representa primero (sin el<label>
y<comment>
quesystem.xml
<table>
Bueno, para eso puede codificar en el archivo phtml en la carpeta de diseño, no necesita tomar iframe como campo, tomar textfield, esto es lo que he hecho para el control deslizante de video
1)
¡Haz esto y estarás listo! realice estos cambios en la carpeta de vista en su módulo y también realice cambios en la acción de guardar en el controlador para que también pueda mostrarla en el lado del administrador.
fuente