Как отобразить изображение на странице редактирования в бэкэнде в Magento 2?
Я создал пользовательскую сетку в серверной части magento 2, пользователь может вставлять значения из серверной части и внешнего интерфейса. Я также загрузил изображения в базу данных. Теперь мой запрос заключается в том, что я хочу отобразить изображение на странице редактирования.
Save.php
<?php
namespace Contact\Modules\Controller\Adminhtml\ContactGrid;
use Magento\Framework\App\Filesystem\DirectoryList;
class Save extends \Magento\Backend\App\Action
{
/**
* @var \Magento\Framework\View\Result\PageFactory
*/
public function execute()
{
$data = $this->getRequest()->getParams();
if ($data) {
$model = $this->_objectManager->create('Contact\Modules\Model\Contact');
if(isset($_FILES['photo']['name']) && $_FILES['photo']['name'] != '') {
try {
$uploader = $this->_objectManager->create('Magento\MediaStorage\Model\File\Uploader', array('fileId' => 'photo'));
$uploader->setAllowedExtensions(array('jpg', 'jpeg', 'gif', 'png'));
$uploader->setAllowRenameFiles(true);
$uploader->setFilesDispersion(true);
$mediaDirectory = $this->_objectManager->get('Magento\Framework\Filesystem')
->getDirectoryRead(DirectoryList::MEDIA);
$result = $uploader->save($mediaDirectory->getAbsolutePath('Contact/Modules/images'));
unset($result['tmp_name']);
unset($result['path']);
$path = 'Contact/Modules/images';
$data['photo'] = $path.$result['file'];
} catch (Exception $e) {
$data['photo'] = $_FILES['photo']['name'];
}
}
else{
if(empty($data['photo']['value']))
{
$data['photo'] = "No Photo available";
}
}
$id = $this->getRequest()->getParam('id');
if ($id) {
$model->load($id);
}
$model->setData($data);
try {
$model->save();
$this->messageManager->addSuccess(__('The Frist Grid Has been Saved.'));
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData(false);
if ($this->getRequest()->getParam('back')) {
$this->_redirect('*/*/edit', array('id' => $model->getId(), '_current' => true));
return;
}
$this->_redirect('*/*/');
return;
} catch (\Magento\Framework\Model\Exception $e) {
$this->messageManager->addError($e->getMessage());
} catch (\RuntimeException $e) {
$this->messageManager->addError($e->getMessage());
} catch (\Exception $e) {
$this->messageManager->addException($e, __('Something went wrong while saving the banner.'));
}
$this->_getSession()->setFormData($data);
$this->_redirect('*/*/edit', array('banner_id' => $this->getRequest()->getParam('banner_id')));
return;
}
$this->_redirect('*/*/');
}
}
Edit.php
<?php
namespace Contact\Modules\Controller\Adminhtml\ContactGrid;
class Edit extends \Magento\Backend\App\Action
{
/**
* @var \Magento\Framework\View\Result\PageFactory
*/
public function execute()
{
// 1. Get ID and create model
$id = $this->getRequest()->getParam('id');
$model = $this->_objectManager->create('Contact\Modules\Model\Contact');
$registryObject = $this->_objectManager->get('Magento\Framework\Registry');
// 2. Initial checking
if ($id) {
$model->load($id);
if (!$model->getId()) {
$this->messageManager->addError(__('This row no longer exists.'));
$this->_redirect('*/*/');
return;
}
}
// 3. Set entered data if was error when we do save
$data = $this->_objectManager->get('Magento\Backend\Model\Session')->getFormData(true);
if (!empty($data)) {
$model->setData($data);
}
$registryObject->register('modules_contact', $model);
$this->_view->loadLayout();
$this->_view->getLayout()->initMessages();
$this->_view->renderLayout();
}
}
Contact.php
<?php
namespace Contact\Modules\Block\Adminhtml\Contact\Edit\Tab;
class Contact extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
{
/**
* @var \Magento\Store\Model\System\Store
*/
protected $_systemStore;
/**
* @param \Magento\Backend\Block\Template\Context $context
* @param \Magento\Framework\Registry $registry
* @param \Magento\Framework\Data\FormFactory $formFactory
* @param \Magento\Store\Model\System\Store $systemStore
* @param array $data
*/
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Data\FormFactory $formFactory,
\Magento\Store\Model\System\Store $systemStore,
array $data = array()
) {
$this->_systemStore = $systemStore;
parent::__construct($context, $registry, $formFactory, $data);
}
/**
* Prepare form
*
* @return $this
*/
protected function _prepareForm()
{
/* @var $model \Magento\Cms\Model\Page */
$model = $this->_coreRegistry->registry('modules_contact');
$isElementDisabled = false;
/** @var \Magento\Framework\Data\Form $form */
$form = $this->_formFactory->create();
$form->setHtmlIdPrefix('page_');
$fieldset = $form->addFieldset('base_fieldset', array('legend' => __('Contact')));
if ($model->getId()) {
$fieldset->addField('id', 'hidden', array('name' => 'id'));
}
$fieldset->addField(
'email',
'text',
array(
'name' => 'email',
'label' => __('Email'),
'title' => __('Email'),
/*'required' => true,*/
)
);
$fieldset->addField(
'subject',
'text',
array(
'name' => 'subject',
'label' => __('Subject'),
'title' => __('Subject'),
/*'required' => true,*/
)
);
$fieldset->addField(
'gender',
'radios',
array(
'name' => 'gender',
'label' => __('Gender'),
'title' => __('Gender'),
'values' => array(
array('value'=>'Male','label'=>'Male'),
array('value'=>'Female','label'=>'Female'),
),
/*'required' => true,*/
)
);
$fieldset->addField(
'city',
'select',
[
'label' => __('City'),
'title' => __('City'),
'name' => 'city',
'required' => true,
'options' => ['Bikaner' => __('Bikaner'), 'Jodhpur' => __('Jodhpur'), 'Jaipur' => __('Jaipur'), 'Kota' => __('Kota')]
]
);
$fieldset->addField(
'photo',
'file',
array(
'name' => 'photo',
'label' => __('Photo'),
'title' => __('Photo'),
/*'required' => true,*/
)
);
$fieldset->addField(
'message',
'textarea',
array(
'name' => 'message',
'label' => __('Message'),
'title' => __('Message'),
/*'required' => true,*/
)
);
/*{{CedAddFormField}}*/
if (!$model->getId()) {
$model->setData('status', $isElementDisabled ? '2' : '1');
}
$form->setValues($model->getData());
$this->setForm($form);
return parent::_prepareForm();
}
/**
* Prepare label for tab
*
* @return string
*/
public function getTabLabel()
{
return __('Contact');
}
/**
* Prepare title for tab
*
* @return string
*/
public function getTabTitle()
{
return __('Contact');
}
/**
* {@inheritdoc}
*/
public function canShowTab()
{
return true;
}
/**
* {@inheritdoc}
*/
public function isHidden()
{
return false;
}
/**
* Check permission for passed action
*
* @param string $resourceId
* @return bool
*/
protected function _isAllowedAction($resourceId)
{
return $this->_authorization->isAllowed($resourceId);
}
}
Из save.php я могу сохранить изображение.
3
Author: Qaisar Satti, 2016-10-05
2 answers
Тип поля должен быть image
не файл. чтобы отобразить изображение по умолчанию
$fieldset->addField(
'photo',
'image',
array(
'name' => 'photo',
'class' =>'admin__control-image',
'label' => __('Photo'),
'title' => __('Photo'),
/*'required' => true,*/
)
);
3
Author: Qaisar Satti, 2016-10-05 10:11:59
Добавьте код ниже в модуль Main.php
$fieldset->addField(
'photo',
'image',
[
'name' => 'photo',
'label' => __('Image'),
'title' => __('Image'),
'required' => true
]
);
Добавьте код ниже в модуль Save.php
public function execute()
{
$image = $this->getRequest()->getFiles();
$data = $this->getRequest()->getPostValue();
/** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultRedirectFactory->create();
if ($data) {
if($image['photo']['name'] == '' && $data['photo']['value'] == ''){
$this->messageManager->addError(__('Please Upload Slide Image.'));
return $resultRedirect->setPath('*/*/edit', ['banner_id' => $this->getRequest()->getParam('banner_id')]);
}
$model = $this->_objectManager->create('Contact\Modules\Model\Contact');
$id = $this->getRequest()->getParam('banner_id');
if ($id) {
$model->load($id);
}
$path = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath('banner/');
if(isset($data['photo']['delete'])){
unlink($this->_filesystem->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath('/').$data['photo']['value']);
$data['photo'] = '';
}else if($image['photo']['name'] != ''){
// Save Image
$uploader = $this->_fileUploaderFactory->create(['fileId' => $image['photo']]);
$uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
$uploader->setAllowRenameFiles(true);
$uploader->save($path);
$fileName = $uploader->getUploadedFileName();
if ($fileName) {
$data['photo'] = 'banner/'.$fileName;
}
// Save Image
}else{
$data['photo'] = $data['photo']['value'];
}
$model->setData($data);
try {
$model->save();
$this->messageManager->addSuccess(__('The slide has been saved.'));
$this->_objectManager->get('Magento\Backend\Model\Session')->setFormData(false);
if ($this->getRequest()->getParam('back')) {
return $resultRedirect->setPath('*/*/edit', ['banner_id' => $model->getId(), '_current' => true]);
}
return $resultRedirect->setPath('*/*/');
} catch (\Magento\Framework\Exception\LocalizedException $e) {
$this->messageManager->addError($e->getMessage());
} catch (\RuntimeException $e) {
$this->messageManager->addError($e->getMessage());
} catch (\Exception $e) {
$this->messageManager->addException($e, __('Something went wrong while saving the slide.'));
}
$this->_getSession()->setFormData($data);
return $resultRedirect->setPath('*/*/edit', ['banner_id' => $this->getRequest()->getParam('banner_id')]);
}
return $resultRedirect->setPath('*/*/');
}
Примечание: Нет необходимости требовать других изменений файлов.
0
Author: Suresh Chikani, 2016-10-05 10:16:37