Я хочу разрешить администратору создавать столько полей, сколько он хочет. Я нашел решение в другом расширении и использовал его в качестве отправной точки. Итак, у меня есть такой код:
В 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>
И в 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;
}
Это работает, как ожидалось, и это так:
Теперь я хочу добавить поле загрузки изображений в мой набор полей. Как мне это сделать?
Обновление :
Я знаю, что system.xml
вы можете написать этот код для добавления полей изображения:
<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>
Но я не могу использовать этот подход, потому что я хочу иметь несколько полей, а не одно.
источник
system.xml
в моем случае. Пожалуйста, прочитайте мой вопрос еще раз.Я попробовал что-то похожее и только частично решил.
Во-первых, чтобы добавить несколько типов полей в ваш массив / сериализованный параметр конфигурации, я создал расширенную версию класса,
Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
которая включала типыselect
,multiselect
иfile
(поскольку оригинальная функция позволяла вам использовать толькоtext
тип), см. Https: / /github.com/Genmato/Core/blob/master/app/code/community/Genmato/Core/Block/System/Config/Form/Field/Array/Abstract.php (файл слишком велик для включения в него).Затем я обнаружил, что объединение типа файла с другими полями (выбор / текст) не работает должным образом. При сохранении данных только детали файла, где это возможно, и массив были перепутаны. Поэтому я выбрал решение для одного поля для сохранения загрузок:
Соответствующий класс блока:
И класс внутренней модели:
И второе поле, где я храню свою конфигурацию:
И класс блока используется:
Здесь я использую опцию select / dropdown, чтобы выбрать загруженный файл для каждой строки конфигурации, это также позволяет мне использовать один и тот же файл в нескольких строках.
Возможно, это не идеальное решение для вашей ситуации, но может стать отправной точкой для решения вашей проблемы. Не стесняйтесь использовать части кода, используемые в модуле Genmato_Core (см. Https://github.com/Genmato/Core ) для вашего собственного решения.
источник
Май ниже ссылки поможет вам решить ваш запрос.
http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/
Показать уменьшенное изображение и удалить изображение в пользовательской форме модуля администратора
источник