Quiero permitir que el usuario administrador genere tantos campos como quiera. Encontré una solución en otra extensión y la usé como punto de partida. Entonces tengo un código como este:
En 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>
Y en 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 se esperaba y es así:
Ahora quiero agregar un campo de carga de imagen a mi conjunto de campos. ¿Cómo debo hacer eso?
Actualización :
Sé que en system.xml
usted puede escribir este código para agregar campos de imagen:
<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>
Pero no puedo usar este enfoque porque quiero tener múltiples campos, no uno.
fuente
system.xml
en mi caso. Por favor lea mi pregunta nuevamente.Intenté algo similar y solo lo resolví parcialmente.
En primer lugar, con el fin de añadir varios tipos de campos en su opción de configuración serie / serializado, he creado una versión extendida de la clase
Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
que incluye los tiposselect
,multiselect
yfile
(como la función original sólo se permite que utilice eltext
tipo), consulte https: / /github.com/Genmato/Core/blob/master/app/code/community/Genmato/Core/Block/System/Config/Form/Field/Array/Abstract.php (el archivo es demasiado grande para incluirlo aquí).Luego descubrí que combinar el tipo de archivo con otros campos (select / text) no funcionaba correctamente. Al guardar los datos, solo los detalles del archivo estaban disponibles y la matriz se estropeó. Así que opté por una solución para tener un campo para guardar las cargas:
La clase de bloque correspondiente:
Y la clase de modelo de back-end:
Y un segundo campo donde almaceno mi configuración:
Y la clase de bloque utilizada:
Aquí uso una opción de selección / menú desplegable para seleccionar el archivo cargado por fila de configuración, esto también me permite usar el mismo archivo en varias filas.
Puede que esta no sea la solución perfecta para su situación, pero podría ser un punto de partida para resolver su problema. Siéntase libre de usar partes del código utilizado en el módulo Genmato_Core (consulte https://github.com/Genmato/Core ) para su propia solución.
fuente
Los siguientes enlaces de mayo le ayudan a resolver su consulta.
http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/
Mostrar imagen en miniatura y eliminar imagen en el formulario de administración del módulo personalizado
fuente