Chcę pozwolić administratorowi na generowanie tylu pól, ile on / ona chce. Znalazłem rozwiązanie w innym rozszerzeniu i wykorzystałem je jako punkt wyjścia. Mam więc taki kod:
W 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>
I w 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;
}
Działa zgodnie z oczekiwaniami i wygląda tak:
Teraz chcę dodać pole Przesyłanie obrazu do mojego zestawu pól. Jak mam to zrobić?
Aktualizacja :
Wiem, system.xml
że możesz napisać ten kod, aby dodać pola obrazu:
<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>
Ale nie mogę zastosować tego podejścia, ponieważ chcę mieć wiele pól, a nie jedno.
źródło
system.xml
w moim przypadku. Przeczytaj ponownie moje pytanie.Próbowałem czegoś podobnego i udało mi się to rozwiązać tylko częściowo.
Po pierwsze, aby dodać kilka rodzajów pól w tablicy / serializowane opcją config, stworzyłem rozszerzoną wersję klasy
Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
, które obejmowały typyselect
,multiselect
ifile
(jak pierwotna funkcja dozwolone wyłącznie na korzystanie ztext
rodzaju), patrz https: / /github.com/Genmato/Core/blob/master/app/code/community/Genmato/Core/Block/System/Config/Form/Field/Array/Abstract.php (plik jest nieco za duży, aby go tu dołączyć).Następnie dowiedziałem się, że połączenie typu pliku z innymi polami (select / text) nie działa poprawnie. Podczas zapisywania danych tylko szczegóły pliku, jeśli są dostępne, i tablica została pomieszana. Wybrałem rozwiązanie, które ma jedno pole do zapisywania przesyłanych plików:
Odpowiednia klasa bloku:
I klasa modelu zaplecza:
I drugie pole, w którym przechowuję moją konfigurację:
A zastosowana klasa bloków:
Tutaj używam opcji wyboru / menu rozwijanego, aby wybrać przesłany plik dla wiersza konfiguracji, co pozwala mi również używać tego samego pliku w wielu wierszach.
To może nie być idealne rozwiązanie dla Twojej sytuacji, ale może być punktem wyjścia do rozwiązania problemu. Zapraszam do korzystania z części kodu używanego w module Genmato_Core (patrz https://github.com/Genmato/Core ) dla własnego rozwiązania.
źródło
Poniższe linki pomogą Ci rozwiązać twoje zapytanie.
http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/
Pokaż miniaturę i usuń obraz w niestandardowym formularzu administratora modułu
źródło