Quero permitir que o usuário administrador gere quantos campos ele / ela deseja. Encontrei uma solução em outra extensão e a usei como ponto de partida. Então, eu tenho um código como este:
Em system.xml
:
<showcases translate="label">
<label>Showcases</label>
<frontend_type>text</frontend_type>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<showcase translate="label">
<label>Showcases</label>
<frontend_type>select</frontend_type>
<frontend_model>awesomehome/adminhtml_showcases</frontend_model>
<backend_model>adminhtml/system_config_backend_serialized</backend_model>
<sort_order>410</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</showcase>
</fields>
</showcases>
E em Namespace/Awesomehome/Block/Adminhtml/Showcases.php
:
class Namespace_Awesomehome_Block_Adminhtml_Showcases
extends Mage_Adminhtml_Block_System_Config_Form_Field
{
protected $_addRowButtonHtml = array();
protected $_removeRowButtonHtml = array();
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
$this->setElement($element);
$html = '<div id="showcase_template" style="display:none">';
$html .= $this->_getRowTemplateHtml();
$html .= '</div>';
$html .= '<ul id="showcase_container">';
if ($this->_getValue('showcases')) {
foreach (array_keys($this->_getValue('showcases')) as $row) {
if ($row) {
$html .= $this->_getRowTemplateHtml($row);
}
}
}
$html .= '</ul>';
$html .= $this->_getAddRowButtonHtml(
'showcase_container',
'showcase_template', $this->__('Add new showcase')
);
return $html;
}
protected function _getRowTemplateHtml($row = 0)
{
$html = '<li><fieldset>';
$html .= $this->_getShowcaseTypeHtml($row);
$html .= $this->_getRemoveRowButtonHtml();
$html .= '</fieldset></li>';
return $html;
}
protected function _getShowcaseTypeHtml($row) {
$html = '<label>' . $this->__('Showcase type:') . '</label>';
$html .= '<select style="width:100%;" class="input-text" name="' . $this->getElement()->getName() . '[type][]">';
$html .= '<option value="1" '
. ($this->_getValue('type/' . $row) == "1" ? 'selected="selected"' : '') .'>'
. $this->__("Simple") . "</option>";
$html .= '<option value="2" '
. ($this->_getValue('type/' . $row) == "2" ? 'selected="selected"' : '') .'>'
. $this->__("With Image") . "</option>";
$html .= '</select><br/>';
return $html;
}
Funciona como esperado e é assim:
Agora eu quero adicionar um campo de upload de imagens ao meu conjunto de campos. Como devo fazer isso?
Atualização :
Eu sei que system.xml
você pode escrever este código para adicionar campos de imagem:
<image translate="label">
<label>Image</label>
<frontend_type>image</frontend_type>
<backend_model>adminhtml/system_config_backend_image</backend_model>
<upload_dir config="system/filesystem/media" scope_info="1">awesomehome/topcategories</upload_dir>
<base_url type="media" scope_info="1">awesomehome/topcategories</base_url>
<sort_order>30</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<comment>Allowed file types: jpeg, gif, png.</comment>
</image>
Mas não posso usar essa abordagem porque quero ter vários campos, não um.
fonte
system.xml
no meu caso. Por favor, leia minha pergunta novamente.Eu tentei algo semelhante e só o resolvi parcialmente.
Em primeiro lugar, a fim de adicionar vários tipos de campos na sua opção de configuração de matriz / serializado, eu criei uma versão estendida da classe
Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
que incluiu os tiposselect
,multiselect
efile
(como a função original só é permitido que você use otext
tipo), consulte https: / /github.com/Genmato/Core/blob/master/app/code/community/Genmato/Core/Block/System/Config/Form/Field/Array/Abstract.php (o arquivo é um pouco grande demais para incluir aqui).Em seguida, descobri que combinar o tipo de arquivo com outros campos (selecionar / texto) não funcionava corretamente. Ao salvar os dados, apenas os detalhes do arquivo estavam disponíveis e a matriz foi alterada. Por isso, optei por uma solução para ter um campo para salvar os uploads:
A classe de bloco correspondente:
E a classe do modelo de back-end:
E um segundo campo em que armazeno minha configuração:
E a classe de bloco usada:
Aqui eu uso uma opção de seleção / lista suspensa para selecionar o arquivo carregado por linha de configuração, isso também me permite usar o mesmo arquivo em várias linhas.
Essa pode não ser a solução perfeita para sua situação, mas pode ser um ponto de partida para resolver seu problema. Sinta-se à vontade para usar partes do código usado no módulo Genmato_Core (consulte https://github.com/Genmato/Core ) para sua própria solução.
fonte
Os links abaixo de maio ajudam a resolver sua consulta.
http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/
Mostrar imagem em miniatura e excluir imagem no formulário de administração do módulo personalizado
fonte