Saya ingin mengizinkan pengguna admin untuk menghasilkan bidang sebanyak yang dia inginkan. Saya menemukan solusi di ekstensi lain dan saya menggunakannya sebagai titik awal. Jadi saya punya kode seperti ini:
Dalam 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>
Dan di 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;
}
Ini berfungsi seperti yang diharapkan dan seperti ini:
Sekarang saya ingin menambahkan bidang Unggah gambar ke bidang saya. Bagaimana saya harus melakukan itu?
Perbarui :
Saya tahu bahwa system.xml
Anda dapat menulis kode ini untuk menambahkan bidang gambar:
<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>
Tapi saya tidak bisa menggunakan pendekatan ini karena saya ingin memiliki banyak bidang, bukan satu.
sumber
system.xml
dalam kasus saya. Silakan baca pertanyaan saya lagi.Saya mencoba sesuatu yang serupa dan hanya menyelesaikannya sebagian.
Pertama, untuk menambahkan beberapa jenis bidang dalam opsi array / serialisasi Anda, saya membuat versi kelas
Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
yang diperluas yang menyertakan jenis-jenisnyaselect
,multiselect
danfile
(karena fungsi aslinya hanya memungkinkan Anda untuk menggunakantext
jenis tersebut), lihat https: / /github.com/Genmato/Core/blob/master/app/code/community/Genmato/Core/Block/System/Config/Form/Field/Array/Abstract.php (file agak besar untuk disertakan di sini).Selanjutnya saya menemukan bahwa menggabungkan jenis file dengan bidang (pilih / teks) lainnya tidak berfungsi dengan baik. Saat menyimpan data hanya detail file di mana tersedia dan array menjadi kacau. Jadi saya memilih solusi untuk memiliki satu bidang untuk menyimpan unggahan:
Kelas blok yang sesuai:
Dan kelas model backend:
Dan bidang kedua tempat saya menyimpan konfigurasi saya:
Dan kelas blok yang digunakan:
Di sini saya menggunakan opsi pilih / dropdown untuk memilih file yang diunggah per baris konfigurasi, ini juga memungkinkan saya untuk menggunakan file yang sama pada beberapa baris.
Ini mungkin bukan solusi yang sempurna untuk situasi Anda, tetapi mungkin merupakan titik awal untuk menyelesaikan masalah Anda. Jangan ragu untuk menggunakan bagian dari kode yang digunakan dalam modul Genmato_Core (Lihat https://github.com/Genmato/Core ) untuk solusi Anda sendiri.
sumber
Mungkin tautan di bawah ini membantu Anda untuk memecahkan pertanyaan Anda.
http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/
Tampilkan gambar kecil dan hapus gambar dalam formulir admin modul khusus
sumber