Estou criando um módulo personalizado que exibe o Google Maps no front-end do Magento. Para obter esses mapas, o administrador precisaria inserir e salvar o URL da localização do mapa no painel do administrador. Tudo isso funciona bem. O URL está sendo salvo no banco de dados e os mapas são exibidos no frontend da loja.
Mas agora eu também gostaria de exibir uma visualização deste mapa no painel de administração. Isso permitirá que o administrador verifique facilmente se o URL correto foi inserido e salvo.
Quero exibir isso Preview Map
em um novo <field>
(logo abaixo do campo em que o URL deve ser inserido) e usar uma Visualização de mapa <label>
. A maquete abaixo mostra o que estou tentando alcançar.
No meu system.xml
arquivo de módulos , adicionei o seguinte 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>
E my MyNamespace/MyModule/Block/System/Config/Map.php
contém o seguinte 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>';
}
}
Isso renderiza o Google Map no Painel de administração e também é renderizado corretamente, <group>
mas não é carregado no <field>
que eu quero. Esta é uma captura de tela real da situação atual.
Eu tentei tudo o <frontend_type>
que posso pensar ....
Portanto, minha pergunta é: como inserir um <iframe>
em um painel de administração <field>
? Devo adicionar algo ao meu <frontend_model>
?
fonte
<frontend_model>
é realmente o caminho a percorrer. Dentro desse arquivo, você deve ser capaz de$rendered .= '<iframe...
sort_order
seu'Map Details'
campo? É menor do que o20
usado para o seu'Map Preview'
?Respostas:
Com
Varien_Data_Form_Element_Renderer_Interface
você, tenha a liberdade de projetar toda a linha como quiser. Como você estendeMage_Adminhtml_Block_Abstract
e retorna apenas o iframe em seurender()
método, é isso que você obtém. Para usar o layout da tabela padrão, estendaMage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element
e use seutoHtml()
método padrão depois de modificar a propriedade do elemento para exibir o iframe.Atualmente, o
render
método receberá umVarien_Data_Form_Element_Link
parâmetro as porque esse é ofrontend_type
que você especificou. Mas como você não deseja realmente mostrar um campo de entrada, altere-o para um tipo de frontend em que possa substituir mais facilmente a saída renderizada para HTML arbitrário.Eu sugiro usar
label
, então o método render fica assim:Observe que você deve usar
after_element_html
e deixar emvalue
branco, porque o valor de um rótulo sempre é escapado, enquanto você sempre pode usar HTML arbitrário emafter_element_html
fonte
Defina uma classe CSS aqui e remova a largura = "100%".
exemplo:
CSS (apenas adivinhando a largura e as margens)
Você também pode usar o
text
tipo de front-end em vez delink
.Você pode encontrar os diferentes tipos aqui .
fonte
<iframe>
ainda é renderizado acima do conjunto de,<fields>
mas eu preciso que ele seja renderizado dentro do<table>
na segunda linha (sort_order 20). Eu só não entendo por que o<iframe>
é processado primeiro (sem<label>
e<comment>
que defini emsystem.xml
) e então o<table>
é processado depois, com apenas uma linha ...Bem, para que você possa codificar no arquivo phtml na pasta de design, você não precisa usar o iframe como campo.
1
faça isso e está tudo pronto! faça essas alterações na pasta view no seu módulo e também faça alterações no saveaction no controller para poder exibi-lo também no lado do administrador.
fonte