Tôi muốn cho phép người dùng quản trị tạo nhiều trường như anh ấy / cô ấy muốn. Tôi tìm thấy một giải pháp trong một phần mở rộng khác và tôi đã sử dụng nó làm điểm khởi đầu của mình. Vì vậy, tôi có một mã như thế này:
Trong 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>
Và trong 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;
    }
Nó hoạt động như mong đợi và nó như thế này:
Bây giờ tôi muốn thêm một trường tải lên hình ảnh vào bộ trường của tôi. Tôi nên làm thế nào?
Cập nhật :
Tôi biết rằng trong system.xmlbạn có thể viết mã này để thêm các trường hình ảnh:
<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>
Nhưng tôi không thể sử dụng phương pháp này vì tôi muốn có nhiều lĩnh vực chứ không phải một lĩnh vực.

system.xmltrong trường hợp của tôi. Xin vui lòng đọc câu hỏi của tôi một lần nữa.