Показывать уменьшенное изображение и удалять изображение в форме администратора пользовательского модуля
Я пытаюсь отобразить уменьшенное изображение в форме редактирования пользовательского модуля администратора следующим образом
Прямо сейчас я использую это addfield
.
$fieldset->addField('main_image', 'image', array(
'label' => Mage::helper('ram')->__('Image'),
'required' => false,
'name' => 'main_image',
));
Я посмотрел на lib/Varien/Data/Form/Element/Image.php
и нашел там этот код, который использует URL-адрес изображений.
public function getElementHtml()
{
$html = '';
if ((string)$this->getValue()) {
$url = $this->_getUrl();
if( !preg_match("/^http\:\/\/|https\:\/\//", $url) ) {
$url = Mage::getBaseUrl('media') . $url;
}
Но я не сохраняю изображения в папке мультимедиа для этого модуля. Я загружаю изображения с контроллера в папку ram_images
.
$path = Mage::getBaseDir('media') . DS .'ram_images' ;
$uploader->save($path, $_FILES['main_image']['name'] );
Кроме того, я не смог изменить URL-адрес из файла Image.php
, так как это повлияет на другие системные модули. есть ли обходной путь здесь. Пожалуйста, предложите решение.
И я также хочу удалить изображение, используя флажок, указанный ниже кнопки загрузки.
Спасибо.
3 answers
Добавьте код в файл контроллера
public function saveAction() { ... if (!empty( $_FILES['main_image']['name'] )) { $data['main_image'] = $_FILES['main_image']['name'] ; } else { if (isset($data['main_image']['delete']) && $data['main_image']['delete'] == 1) { if ($data['main_image']['value'] != '') $this->removeFile($data['main_image']['value']); $data['main_image'] = ''; } else { unset($data['main_image']); } } ... } public function removeFile($file) { $_helper = Mage::helper('ram'); $file = $_helper->updateDirSepereator($file); $directory = Mage::getBaseDir('media') . DS .'ram_images' ; $io = new Varien_Io_File(); $result = $io->rmdir($directory, true); }
Создайте функцию ниже в вспомогательном классе
public function updateDirSepereator($path) { return str_replace('\\', DS, $path); }
Добавьте 'enctype'’ ⇒ 'multipart/form-data'
, что должно помочь получить что-то в $_FILES
В /app/code/local/Chilly/ModName/Block/Adminhtml/ModName/Edit/Form.php
У вас должно быть что-то похожее на это:
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
'method' => 'post',
'enctype' => 'multipart/form-data'
)
);
Затем в/app/code/local/Chilly/ModName/Block/Adminhtml/ModName/Edit/Tab/Form.php
$fieldset->addField('main_image', 'image', array(
'label' => Mage::helper('ram')->__('Image'),
'required' => false,
'name' => 'main_image',
));
Затем в/app/code/local/Chilly/ModName/controllers/Adminhtml/ModuleNameController.php в saveAction()
if(isset($_FILES['main_images']['name'])) {
try {
$uploader = new Varien_File_Uploader('main_images');
$uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); // or pdf or anything
$uploader->setAllowRenameFiles(false);
$uploader->setFilesDispersion(false);
$path = Mage::getBaseDir('media') . DS. 'ram_images'.DS ;
$destFile = $path.$_FILES['main-images']['name'];
$filename = $uploader->getNewFileName($destFile);
$uploader->save($path, $filename);
$data[main_images] = 'ram_images'. $filename;
}catch(Exception $e) { }
}
Ваша форма редактирования будет отображать изображение, подобное как..
Я думаю, что у меня есть простое решение для отображения уменьшенного изображения.
if(isset($_FILES['main_images']['name'])) {
try {
$uploader = new Varien_File_Uploader('main_images');
$uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
$uploader->setAllowRenameFiles(false);
$uploader->setFilesDispersion(false);
$path = Mage::getBaseDir('media') . / ;
$uploader->save($path, $_FILES['main_images']['name']);
$data[main_images] ='ram_images'. $_FILES['main_images']['name'];
}catch(Exception $e) { }
}
Просто также сохранил имя папки в таблице, и это сработало.
Чтобы удалить изображение, просто добавьте следующий код в функцию контроллеров модулей saveAction()
.
if (!empty( $_FILES['main_image']['name'] ))
{
$data['main_image'] = $_FILES['main_image']['name'] ;
}
else
{
if (isset($data['main_image']['delete']) && $data['main_image']['delete'] == 1)
{
$data['main_image']='';
}
else
{
unset($data['main_iamge']);
}
}
Это сработало.