Ich möchte dem Administrator erlauben, so viele Felder zu generieren, wie er möchte. Ich habe eine Lösung in einer anderen Erweiterung gefunden und sie als Ausgangspunkt verwendet. Ich habe also einen Code wie diesen:
In 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>
Und in 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;
}
Es funktioniert wie erwartet und es ist wie folgt:
Jetzt möchte ich meinem Feldsatz ein Bild-Upload-Feld hinzufügen. Wie soll ich das machen
Update :
Ich weiß, dass system.xml
Sie diesen Code schreiben können, um Bildfelder hinzuzufügen:
<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>
Ich kann diesen Ansatz jedoch nicht verwenden, da ich mehrere Felder haben möchte, nicht eines.
quelle
system.xml
in meinem Fall nicht verwenden . Bitte lesen Sie meine Frage noch einmal.Ich habe etwas Ähnliches ausprobiert und es nur teilweise gelöst.
Um mehrere Arten von Feldern in Ihre Array- / serialisierte Konfigurationsoption einzufügen, habe ich zunächst eine erweiterte Version der Klasse erstellt
Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
, die die Typen enthältselect
,multiselect
undfile
(da Sie mit der ursprünglichen Funktion nur dentext
Typ verwenden konnten) siehe https: / /github.com/Genmato/Core/blob/master/app/code/community/Genmato/Core/Block/System/Config/Form/Field/Array/Abstract.php (Datei ist etwas zu groß, um sie hier aufzunehmen).Als nächstes stellte ich fest, dass das Kombinieren des Dateityps mit anderen Feldern (Auswahl / Text) nicht richtig funktionierte. Beim Speichern der Daten wurden nur die Dateidetails verfügbar und das Array wurde durcheinander gebracht. Deshalb habe ich mich für eine Lösung entschieden, die ein Feld zum Speichern der Uploads enthält:
Die entsprechende Blockklasse:
Und die Backend-Modellklasse:
Und ein zweites Feld, in dem ich meine Konfiguration speichere:
Und die verwendete Blockklasse:
Hier verwende ich eine Auswahl- / Dropdown-Option, um die hochgeladene Datei pro Konfigurationszeile auszuwählen. Dadurch kann ich dieselbe Datei auch für mehrere Zeilen verwenden.
Dies ist möglicherweise nicht die perfekte Lösung für Ihre Situation, aber möglicherweise ein Ausgangspunkt, um Ihr Problem zu lösen. Sie können auch Teile des Codes verwenden, der im Modul Genmato_Core (siehe https://github.com/Genmato/Core ) für Ihre eigene Lösung verwendet wird.
quelle
Die folgenden Links helfen Ihnen bei der Lösung Ihrer Anfrage.
http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/
Miniaturbild anzeigen und Bild im benutzerdefinierten Modulverwaltungsformular löschen
quelle