How to edit grid items in Magento 2
Create Controller Action Edit
Rsgitech\News\Controller\Adminhtml\Allnews\Edit.php
<?php
namespace Rsgitech\News\Controller\Adminhtml\Allnews;
use Magento\Backend\App\Action;
class Edit extends \Magento\Backend\App\Action
{
/**
* Core registry
*
* @var \Magento\Framework\Registry
*/
protected $_coreRegistry;
/**
* @var \Magento\Framework\View\Result\PageFactory
*/
protected $resultPageFactory;
/**
* @param Action\Context $context
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
* @param \Magento\Framework\Registry $registry
*/
public function __construct(
Action\Context $context,
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
\Magento\Framework\Registry $registry
) {
$this->resultPageFactory = $resultPageFactory;
$this->_coreRegistry = $registry;
parent::__construct($context);
}
/**
* Authorization level
*
* @see _isAllowed()
*/
protected function _isAllowed()
{
return $this->_authorization->isAllowed('Rsgitech_News::save');
}
/**
* Init actions
*
* @return \Magento\Backend\Model\View\Result\Allnews
*/
protected function _initAction()
{
// load layout, set active menu and breadcrumbs
/** @var \Magento\Backend\Model\View\Result\Allnews $resultPage */
$resultPage = $this->resultPageFactory->create();
$resultPage->setActiveMenu('Rsgitech_News::news_allnews')
->addBreadcrumb(__('News'), __('News'))
->addBreadcrumb(__('Manage All News'), __('Manage All News'));
return $resultPage;
}
/**
* Edit Allnews
*
* @return \Magento\Backend\Model\View\Result\Allnews|\Magento\Backend\Model\View\Result\Redirect
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function execute()
{
// 1. Get ID and create model
$id = $this->getRequest()->getParam('news_id');
$model = $this->_objectManager->create(\Rsgitech\News\Model\Allnews::class);
// 2. Initial checking
if ($id) {
$model->load($id);
if (!$model->getId()) {
$this->messageManager->addError(__('This news no longer exists.'));
/** \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
$resultRedirect = $this->resultRedirectFactory->create();
return $resultRedirect->setPath('*/*/');
}
}
$this->_coreRegistry->register('news_allnews', $model);
// 5. Build edit form
/** @var \Magento\Backend\Model\View\Result\Allnews $resultPage */
$resultPage = $this->_initAction();
$resultPage->addBreadcrumb(
$id ? __('Edit News') : __('Add News'),
$id ? __('Edit News') : __('Add News')
);
$resultPage->getConfig()->getTitle()->prepend(__('Allnews'));
$resultPage->getConfig()->getTitle()
->prepend($model->getId() ? $model->getTitle() : __('Add News'));
return $resultPage;
}
}
?>
Create Controller Action InlineEdit
Rsgitech\News\Controller\Adminhtml\Allnews\InlineEdit.php
<?php
namespace Rsgitech\News\Controller\Adminhtml\Allnews;
use Magento\Backend\App\Action\Context;
use Rsgitech\News\Api\AllnewsRepositoryInterface as AllnewsRepository;
use Magento\Framework\Controller\Result\JsonFactory;
use Rsgitech\News\Api\Data\AllnewsInterface;
class InlineEdit extends \Magento\Backend\App\Action
{
protected $allnewsRepository;
/**
* @var \Magento\Framework\Controller\Result\JsonFactory
*/
protected $jsonFactory;
public function __construct(
Context $context,
AllnewsRepository $allnewsRepository,
JsonFactory $jsonFactory
) {
parent::__construct($context);
$this->allnewsRepository = $allnewsRepository;
$this->jsonFactory = $jsonFactory;
}
/**
* Authorization level
*
* @see _isAllowed()
*/
protected function _isAllowed()
{
return $this->_authorization->isAllowed('Rsgitech_News::save');
}
/**
* @return \Magento\Framework\Controller\ResultInterface
*/
public function execute()
{
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
$resultJson = $this->jsonFactory->create();
$error = false;
$messages = [];
$postItems = $this->getRequest()->getParam('items', []);
if (!($this->getRequest()->getParam('isAjax') && count($postItems))) {
return $resultJson->setData([
'messages' => [__('Please correct the data sent.')],
'error' => true,
]);
}
foreach (array_keys($postItems) as $newsId) {
$news = $this->allnewsRepository->getById($newsId);
try {
$newsData = $postItems[$newsId];
$extendedNewsData = $news->getData();
$this->setNewsData($news, $extendedNewsData, $newsData);
$this->allnewsRepository->save($news);
} catch (\Magento\Framework\Exception\LocalizedException $e) {
$messages[] = $this->getErrorWithNewsId($news, $e->getMessage());
$error = true;
} catch (\RuntimeException $e) {
$messages[] = $this->getErrorWithNewsId($news, $e->getMessage());
$error = true;
} catch (\Exception $e) {
$messages[] = $this->getErrorWithNewsId(
$news,
__('Something went wrong while saving the news.')
);
$error = true;
}
}
return $resultJson->setData([
'messages' => $messages,
'error' => $error
]);
}
protected function getErrorWithNewsId(AllnewsInterface $news, $errorText)
{
return '[News ID: ' . $news->getId() . '] ' . $errorText;
}
public function setNewsData(\Rsgitech\News\Model\Allnews $news, array $extendedNewsData, array $newsData)
{
$news->setData(array_merge($news->getData(), $extendedNewsData, $newsData));
return $this;
}
}
?>
Then run below commands
php bin/magento setup:upgrade
php bin/magetno setup:static-content:deploy
php bin/magento cache:flush
0 comments:
Post a Comment
Thanks