Je veux permettre à l'administrateur de générer autant de champs qu'il le souhaite. J'ai trouvé une solution dans une autre extension et je l'ai utilisée comme point de départ. J'ai donc un code comme celui-ci:
Dans 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>
Et dans 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;
}
Cela fonctionne comme prévu et c'est comme ceci:
Maintenant, je veux ajouter un champ de téléchargement d'image à mon jeu de champs. Comment dois-je faire ça?
Mise à jour :
Je sais que system.xml
vous pouvez écrire ce code pour ajouter des champs d'image:
<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>
Mais je ne peux pas utiliser cette approche car je veux avoir plusieurs champs, pas un.
la source
system.xml
dans mon cas. Veuillez relire ma question.J'ai essayé quelque chose de similaire et je ne l'ai résolu que partiellement.
Tout d'abord, afin d'ajouter plusieurs types de champs dans votre option de configuration de tableau / sérialisé, j'ai créé une version étendue de la classe
Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
qui comprenait les typesselect
,multiselect
etfile
(comme la fonction d'origine ne vous autorisait à utiliser letext
type), voir https: / /github.com/Genmato/Core/blob/master/app/code/community/Genmato/Core/Block/System/Config/Form/Field/Array/Abstract.php (le fichier est un peu grand à inclure ici).Ensuite, j'ai découvert que la combinaison du type de fichier avec d'autres champs (sélectionner / texte) ne fonctionnait pas correctement. Lors de l'enregistrement des données, seuls les détails du fichier étaient disponibles et le tableau était foiré. J'ai donc opté pour une solution pour avoir un champ pour sauvegarder les uploads:
La classe de bloc correspondante:
Et la classe de modèle backend:
Et un deuxième champ où je stocke ma configuration:
Et la classe de bloc utilisée:
Ici, j'utilise une option de sélection / liste déroulante pour sélectionner le fichier téléchargé par ligne de configuration, cela me permet également d'utiliser le même fichier sur plusieurs lignes.
Ce n'est peut-être pas la solution parfaite pour votre situation, mais peut être un point de départ pour résoudre votre problème. N'hésitez pas à utiliser des parties du code utilisé dans le module Genmato_Core (voir https://github.com/Genmato/Core ) pour votre propre solution.
la source
Les liens ci-dessous peuvent vous aider à résoudre votre requête.
http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/
Afficher l'image miniature et supprimer l'image dans le formulaire d'administration du module personnalisé
la source