Here we create Collection Grid , edit/add grid row and installer in Mahento2
Before starting the code section, let us create the directory structure that we will need for create admin grid edit/add grid row and installer.
app/code/Webkul/Grid
app/code/Webkul/Grid/etc
app/code/Webkul/Grid/etc/Adminhtml
app/code/Webkul/Grid/Block/Adminhtml
app/code/Webkul/Grid/Block/Adminhtml/Grid
app/code/Webkul/Grid/Block/Adminhtml/Grid/Edit
app/code/Webkul/Grid/Block/Adminhtml/Grid/Edit/Tab
app/code/Webkul/Grid/Model
app/code/Webkul/Grid/Model/Resource
app/code/Webkul/Grid/Model/Resource/Grid
app/code/Webkul/Grid/Setup
app/code/Webkul/Grid/Controllers/Adminhtml
app/code/Webkul/Grid/view/adminhtml/layout
app/code/Webkul/Grid/view/adminhtml/templates
Now, as we have the directory structure ready, we will now create file as per module requirement in given sequence:
1.First, we have to create the module configuration file named module.xml in app/code/Webkul/Grid/etc
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd"> <module name="Webkul_Grid" setup_version="1.0.0"></module> </config>
2.Now, we have to create the menu configuration file named menu.xml in app/code/Webkul/Grid/etc/adminhtml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../Magento/Backend/etc/menu.xsd"> <menu> <!-- following row for create a new menu tab magento admin panel --> <add id="Webkul_Grid::view" title="Webkul" module="Webkul_Grid" sortOrder="60" resource="Webkul_Grid::view"/> <!-- following row for add a menu option in new created menu tab --> <add id="Webkul_Grid::grid" title="Webkul Grid View" module="Webkul_Grid" sortOrder="10" parent="Webkul_Grid::view" action="grid/grid" resource="Webkul_Grid::view"/> <!--add id="Webkul_Grid::grid" title="Webkul Grid View" module="Webkul_Grid" sortOrder="10" parent="Webkul_Grid::view" action="grid/grid" resource="Webkul_Grid::view"/--> </menu> </config> after 2nd step your menu created in magento2 admin panel as following![]()
3.Now, we have to create the Installer file named InstallSchema.php in app/code/Webkul/Grid/Setup.
<?php namespace Webkul\Grid\Setup; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\ModuleContextInterface; use Magento\Framework\Setup\SchemaSetupInterface; class InstallSchema implements InstallSchemaInterface { public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { $installer = $setup; $installer->startSetup(); $table = $installer->getConnection()->newTable( $installer->getTable('wk_grid_records') )->addColumn( 'grid_record_id', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, array('identity' => true, 'nullable' => false, 'primary' => true), 'Grid Record Id' )->addColumn( 'title', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 255, array('nullable' => false), 'Title' )->addColumn( 'content', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, '2M', array('nullable' => false), 'Post' )->addColumn( 'publish_date', \Magento\Framework\DB\Ddl\Table::TYPE_DATE, null, array(), 'Publish Date' )->addColumn( 'is_active', \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT, null, array(), 'Active Status' )->addColumn( 'created_at', \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP, null, array(), 'Creation Time' )->addColumn( 'update_time', \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP, null, array(), 'Modification Time' )->setComment( 'Weblog Table' ); $installer->getConnection()->createTable($table); $installer->endSetup(); } }
4.Now, for table ‘wk_grid_records’ which created by installer we have to create the Model file named Grid.php in app/code/Webkul/Grid/Model .
<?php namespace Webkul\Grid\Model; class Grid extends \Magento\Framework\Model\AbstractModel { /** * Initialize resource model * * @return void */ protected function _construct() { $this->_init('Webkul\Grid\Model\Resource\Grid'); } } ?>
5.Now, for table ‘wk_grid_records’ which created by installer we have to create the Resource Model file named Grid.php in app/code/Webkul/Grid/Model/Resource.
<?php namespace Webkul\Grid\Model\Resource; class Grid extends \Magento\Framework\Model\Resource\Db\AbstractDb { /** * Initialize resource model * * @return void */ protected function _construct() { //wk_grid_record is table and grid_record_id is primary key of this table $this->_init('wk_grid_records', 'grid_record_id'); } } ?>
6.Now, for table ‘wk_grid_records’ which created by installer we have to create the Collection file named Collection.php in app/code/Webkul/Grid/Model/Resource/Grid.
<?php namespace Webkul\Grid\Model\Resource\Grid; class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection { /** * Define resource model * * @return void */ protected function _construct() { $this->_init('Webkul\Grid\Model\Grid', 'Webkul\Grid\Model\Resource\Grid'); $this->_map['fields']['page_id'] = 'main_table.page_id'; } /** * Prepare page's statuses. * Available event cms_page_get_available_statuses to customize statuses. * * @return array */ public function getAvailableStatuses() { return [self::STATUS_ENABLED => __('Enabled'), self::STATUS_DISABLED => __('Disabled')]; } }
7.Now,we will create Block file for Grid display in admin panel named Grid.php in app/code/Webkul/Grid/Block/Adminhtml
<?php namespace Webkul\Grid\Block\Adminhtml; class Grid extends \Magento\Backend\Block\Widget\Container { /** * @var string */ protected $_template = 'grid/view.phtml'; /** * @param \Magento\Backend\Block\Widget\Context $context * @param array $data */ public function __construct( \Magento\Backend\Block\Widget\Context $context, array $data = [] ) { parent::__construct($context, $data); } /** * Prepare button and gridCreate Grid , edit/add grid row and installer in Mahento2 * * @return \Magento\Catalog\Block\Adminhtml\Product */ protected function _prepareLayout() { $addButtonProps = [ 'id' => 'add_new_grid', 'label' => __('Add New'), 'class' => 'add', 'button_class' => '', 'class_name' => 'Magento\Backend\Block\Widget\Button\SplitButton', 'options' => $this->_getAddButtonOptions(), ]; $this->buttonList->add('add_new', $addButtonProps); $this->setChild( 'grid', $this->getLayout()->createBlock('Webkul\Grid\Block\Adminhtml\Grid\Grid', 'grid.view.grid') ); return parent::_prepareLayout(); } /** * * * @return array */ protected function _getAddButtonOptions() { $splitButtonOptions[] = [ 'label' => __('Add New'), 'onclick' => "setLocation('" . $this->_getCreateUrl() . "')" ]; return $splitButtonOptions; } /** * * * @param string $type * @return string */ protected function _getCreateUrl() { return $this->getUrl( 'grid/*/new' ); } /** * Render grid * * @return string */ public function getGridHtml() { return $this->getChildHtml('grid'); } }
8.Now,we will create another Block file for Grid display in admin panel named Grid.php in app/code/Webkul/Grid/Block/Adminhtml/Grid
<?php namespace Webkul\Grid\Block\Adminhtml\Grid; class Grid extends \Magento\Backend\Block\Widget\Grid\Extended { /** * @var \Magento\Framework\Module\Manager */ protected $moduleManager; /** * @var \Webkul\Grid\Model\GridFactory */ protected $_gridFactory; /** * @var \Webkul\Grid\Model\Status */ protected $_status; /** * @param \Magento\Backend\Block\Template\Context $context * @param \Magento\Backend\Helper\Data $backendHelper * @param \Webkul\Grid\Model\GridFactory $gridFactory * @param \Webkul\Grid\Model\Status $status * @param \Magento\Framework\Module\Manager $moduleManager * @param array $data * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Backend\Block\Template\Context $context, \Magento\Backend\Helper\Data $backendHelper, \Webkul\Grid\Model\GridFactory $gridFactory, \Webkul\Grid\Model\Status $status, \Magento\Framework\Module\Manager $moduleManager, array $data = [] ) { $this->_gridFactory = $gridFactory; $this->_status = $status; $this->moduleManager = $moduleManager; parent::__construct($context, $backendHelper, $data); } /** * @return void */ protected function _construct() { parent::_construct(); $this->setId('gridGrid'); $this->setDefaultSort('grid_record_id'); $this->setDefaultDir('DESC'); $this->setSaveParametersInSession(true); $this->setUseAjax(true); $this->setVarNameFilter('grid_record'); } /** * @return $this */ protected function _prepareCollection() { $collection = $this->_gridFactory->create()->getCollection(); $this->setCollection($collection); parent::_prepareCollection(); return $this; } /** * @return $this * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function _prepareColumns() { $this->addColumn( 'grid_record_id', [ 'header' => __('ID'), 'type' => 'number', 'index' => 'grid_record_id', 'header_css_class' => 'col-id', 'column_css_class' => 'col-id' ] ); $this->addColumn( 'title', [ 'header' => __('Title'), 'index' => 'title', 'class' => 'xxx' ] ); $this->addColumn( 'publish_date', [ 'header' => __('Publish Date'), 'index' => 'publish_date' ] ); $this->addColumn( 'is_active', [ 'header' => __('Status'), 'index' => 'is_active', 'type' => 'options', 'options' => $this->_status->getOptionArray() ] ); $this->addColumn( 'edit', [ 'header' => __('Edit'), 'type' => 'action', 'getter' => 'getId', 'actions' => [ [ 'caption' => __('Edit'), 'url' => [ 'base' => '*/*/edit' ], 'field' => 'grid_record_id' ] ], 'filter' => false, 'sortable' => false, 'index' => 'stores', 'header_css_class' => 'col-action', 'column_css_class' => 'col-action' ] ); $block = $this->getLayout()->getBlock('grid.bottom.links'); if ($block) { $this->setChild('grid.bottom.links', $block); } return parent::_prepareColumns(); } /** * @return $this */ protected function _prepareMassaction() { $this->setMassactionIdField('grid_record_id'); $this->getMassactionBlock()->setFormFieldName('grid_record_id'); $this->getMassactionBlock()->addItem( 'delete', [ 'label' => __('Delete'), 'url' => $this->getUrl('grid/*/massDelete'), 'confirm' => __('Are you sure?') ] ); $statuses = $this->_status->getOptionArray(); array_unshift($statuses, ['label' => '', 'value' => '']); $this->getMassactionBlock()->addItem( 'status', [ 'label' => __('Change status'), 'url' => $this->getUrl('blog/*/massStatus', ['_current' => true]), 'additional' => [ 'visibility' => [ 'name' => 'status', 'type' => 'select', 'class' => 'required-entry', 'label' => __('Status'), 'values' => $statuses ] ] ] ); return $this; } /** * @return string */ public function getGridUrl() { return $this->getUrl('grid/*/grid', ['_current' => true]); } public function getRowUrl($row) { return $this->getUrl( 'grid/*/edit', ['grid_record_id' => $row->getId()] ); } }
9.Now, for display grid we have to create the Admin Controller file .In Magento2, we need to create separate file for each action of admin under the Controller/Adminhtml/Grid folder. file named Index.php in app/code/Webkul/Grid/Controller/Adminhtml/Grid
<?php namespace Webkul\Grid\Controller\Adminhtml\Grid; use Magento\Backend\App\Action\Context; use Magento\Framework\View\Result\PageFactory; class Index extends \Magento\Backend\App\Action { /** * @var PageFactory */ protected $resultPageFactory; /** * @param Context $context * @param PageFactory $resultPageFactory */ public function __construct( Context $context, PageFactory $resultPageFactory ) { parent::__construct($context); $this->resultPageFactory = $resultPageFactory; } /** * Index action * * @return void */ public function execute() { /** @var \Magento\Backend\Model\View\Result\Page $resultPage */ $resultPage = $this->resultPageFactory->create(); $resultPage->setActiveMenu('Webkul_Grid::grid'); $resultPage->addBreadcrumb(__('CMS'), __('CMS')); $resultPage->addBreadcrumb(__('Manage Webkul Grid View'), __('Manage Webkul Grid View')); $resultPage->getConfig()->getTitle()->prepend(__('Manage Webkul Grid')); return $resultPage; } }
10. Now, we will create a route configuration file for admin named routes.xml in app/code/Webkul/Grid/etc/adminhtml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd"> <router id="admin"> <route id="grid" frontName="grid"> <module name="Webkul_Grid" before="Magento_Adminhtml" /> </route> </router> </config>
11. Now, we will create a layout file for grid display named grid_grid_index.xml in app/code/Webkul/Grid/view/adminhtml/layout
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="content"> <block class="Webkul\Grid\Block\Adminhtml\Grid" name="grid_grid_listing"/> </referenceContainer> <referenceContainer name="admin.grid.grid.view"> <block class="Magento\Framework\View\Element\Text\ListText" name="grid.bottom.links"> <block class="Magento\Catalog\Block\Adminhtml\Rss\Grid\Link" name="grid.rss.link"/> </block> </referenceContainer> </body> </page>
12. Now, we will create a template file for grid display named view.phtml in app/code/Webkul/Grid/view/adminhtml/template/grid
<?php echo $block->getGridHtml(); ?>
13. Now our grid and grid controller is ready when you click your new menu (Webkul -> Webkul Grid View) then your controller run and output display as following
14. Now our grid is ready and our next step to learn how to add a form for add/edit data in grid
Now,we will create Block file for Edit grid data named Edit.php in app/code/Webkul/Grid/Block/Adminhtml/Grid
<?php namespace Webkul\Grid\Block\Adminhtml\Grid; class Edit extends \Magento\Backend\Block\Widget\Form\Container { /** * Core registry * * @var \Magento\Framework\Registry */ protected $_coreRegistry = null; /** * @param \Magento\Backend\Block\Widget\Context $context * @param \Magento\Framework\Registry $registry * @param array $data */ public function __construct( \Magento\Backend\Block\Widget\Context $context, \Magento\Framework\Registry $registry, array $data = [] ) { $this->_coreRegistry = $registry; parent::__construct($context, $data); } /** * Initialize blog post edit block * * @return void */ protected function _construct() { $this->_objectId = 'grid_record_id'; $this->_blockGroup = 'webkul_grid'; $this->_controller = 'adminhtml_grid'; parent::_construct(); $this->buttonList->update('save', 'label', __('Save Grid')); $this->buttonList->add( 'saveandcontinue', [ 'label' => __('Save and Continue Edit'), 'class' => 'save', 'data_attribute' => [ 'mage-init' => [ 'button' => ['event' => 'saveAndContinueEdit', 'target' => '#edit_form'], ], ] ], -100 ); $this->buttonList->update('delete', 'label', __('Delete Grid')); } /** * Retrieve text for header element depending on loaded post * * @return \Magento\Framework\Phrase */ public function getHeaderText() { if ($this->_coreRegistry->registry('webkul_form_data')->getId()) { return __("Edit Post '%1'", $this->escapeHtml($this->_coreRegistry->registry('webkul_form_data')->getTitle())); } else { return __('New Grid'); } } /** * Getter of url for "Save and Continue" button * tab_id will be replaced by desired by JS later * * @return string */ protected function _getSaveAndContinueUrl() { return $this->getUrl('weblog/*/save', ['_current' => true, 'back' => 'edit', 'active_tab' => '{{tab_id}}']); } /** * Prepare layout * * @return \Magento\Framework\View\Element\AbstractBlock */ protected function _prepareLayout() { $this->_formScripts[] = " function toggleEditor() { if (tinyMCE.getInstanceById('page_content') == null) { tinyMCE.execCommand('mceAddControl', false, 'content'); } else { tinyMCE.execCommand('mceRemoveControl', false, 'content'); } }; "; return parent::_prepareLayout(); } }
15. Now, In form there are two parts in admin form one is tab and another is Form then we 1st create tabs file named Tabs.php in app/code/Webkul/Grid/Block/Adminhtml/Grid/Edit
<?php namespace Webkul\Grid\Block\Adminhtml\Grid\Edit; /** * Admin page left menu */ class Tabs extends \Magento\Backend\Block\Widget\Tabs { /** * @return void */ protected function _construct() { parent::_construct(); $this->setId('grid_record'); $this->setDestElementId('edit_form'); $this->setTitle(__('Grid Information')); } }
16. Now, we create tabs file named Form.php in app/code/Webkul/Grid/Block/Adminhtml/Grid/Edit
<?php namespace Webkul\Grid\Block\Adminhtml\Grid\Edit; /** * Adminhtml grid record edit form block * * */ class Form extends \Magento\Backend\Block\Widget\Form\Generic { /** * Prepare form * * @return $this */ protected function _prepareForm() { /** @var \Magento\Framework\Data\Form $form */ $form = $this->_formFactory->create( ['data' => ['id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post']] ); $form->setUseContainer(true); $this->setForm($form); return parent::_prepareForm(); } }
16. Now, we create Form elements in file named Main.php in app/code/Webkul/Grid/Block/Adminhtml/Grid/Edit/Tab
<?php namespace Webkul\Grid\Block\Adminhtml\Grid\Edit\Tab; /** * Blog post edit form main tab */ class Main extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface { /** * @var \Magento\Store\Model\System\Store */ protected $_systemStore; /** * @var \Magento\Cms\Model\Wysiwyg\Config */ protected $_wysiwygConfig; protected $_status; /** * @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, \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig, \Webkul\Grid\Model\Status $status, array $data = [] ) { $this->_systemStore = $systemStore; $this->_wysiwygConfig = $wysiwygConfig; $this->_status = $status; parent::__construct($context, $registry, $formFactory, $data); } /** * Prepare form * * @return $this * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function _prepareForm() { $model = $this->_coreRegistry->registry('webkul_form_data'); $isElementDisabled = false; /** @var \Magento\Framework\Data\Form $form */ $form = $this->_formFactory->create(); $form->setHtmlIdPrefix('page_'); $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Grid Information')]); if ($model->getId()) { $fieldset->addField('grid_record_id', 'hidden', ['name' => 'grid_record_id']); } $fieldset->addField( 'title', 'text', [ 'name' => 'title', 'label' => __('Grid Title'), 'title' => __('Grid Title'), 'required' => true, 'disabled' => $isElementDisabled ] ); $wysiwygConfig = $this->_wysiwygConfig->getConfig(['tab_id' => $this->getTabId()]); $contentField = $fieldset->addField( 'content', 'editor', [ 'name' => 'content', 'style' => 'height:36em;', 'required' => true, 'disabled' => $isElementDisabled, 'config' => $wysiwygConfig ] ); // Setting custom renderer for content field to remove label column $renderer = $this->getLayout()->createBlock( 'Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Element' )->setTemplate( 'Magento_Cms::page/edit/form/renderer/content.phtml' ); $contentField->setRenderer($renderer); $dateFormat = $this->_localeDate->getDateFormat( \IntlDateFormatter::SHORT ); $fieldset->addField( 'publish_date', 'date', [ 'name' => 'publish_date', 'label' => __('Publish Date'), 'date_format' => $dateFormat, 'disabled' => $isElementDisabled, 'class' => 'validate-date validate-date-range date-range-custom_theme-from' ] ); $fieldset->addField( 'is_active', 'select', [ 'label' => __('Status'), 'title' => __('Status'), 'name' => 'is_active', 'required' => true, 'options' => $this->_status->getOptionArray(), 'disabled' => $isElementDisabled ] ); if (!$model->getId()) { $model->setData('is_active', $isElementDisabled ? '0' : '1'); } $form->setValues($model->getData()); $this->setForm($form); return parent::_prepareForm(); } /** * Prepare label for tab * * @return \Magento\Framework\Phrase */ public function getTabLabel() { return __('Grid Information'); } /** * Prepare title for tab * * @return \Magento\Framework\Phrase */ public function getTabTitle() { return __('Grid Information'); } /** * {@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); } }
17. Now, our block files are ready and we create New/Edit controller NewAction.php and Edit in app/code/Webkul/Grid/Controller/Adminhtml/Grid/
NewAction.php
<?php namespace Webkul\Grid\Controller\Adminhtml\Grid; class NewAction extends \Magento\Backend\App\Action { /** * @var \Magento\Backend\Model\View\Result\Forward */ protected $resultForwardFactory; /** * @param \Magento\Backend\App\Action\Context $context * @param \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory */ public function __construct( \Magento\Backend\App\Action\Context $context, \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory ) { $this->resultForwardFactory = $resultForwardFactory; parent::__construct($context); } /** * Forward to edit * * @return \Magento\Backend\Model\View\Result\Forward */ public function execute() { /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */ $resultForward = $this->resultForwardFactory->create(); return $resultForward->forward('edit'); } /** * {@inheritdoc} */ protected function _isAllowed() { return true; } }
Edit.php
<?php namespace Webkul\Grid\Controller\Adminhtml\Grid; use Magento\Backend\App\Action; class Edit extends \Magento\Backend\App\Action { /** * Core registry * * @var \Magento\Framework\Registry */ protected $_coreRegistry = null; /** * @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); } /** * {@inheritdoc} */ protected function _isAllowed() { return true; } /** * Init actions * * @return \Magento\Backend\Model\View\Result\Page */ protected function _initAction() { // load layout, set active menu and breadcrumbs /** @var \Magento\Backend\Model\View\Result\Page $resultPage */ $resultPage = $this->resultPageFactory->create(); $resultPage->setActiveMenu('Webkul_Grid::grid') ->addBreadcrumb(__('Grid'), __('Grid')) ->addBreadcrumb(__('Manage Grid'), __('Manage Grid')); return $resultPage; } /** * Edit grid record * * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect * @SuppressWarnings(PHPMD.NPathComplexity) */ public function execute() { // 1. Get ID and create model $id = $this->getRequest()->getParam('grid_record_id'); $model = $this->_objectManager->create('Webkul\Grid\Model\Grid'); // 2. Initial checking if ($id) { $model->load($id); if (!$model->getId()) { $this->messageManager->addError(__('This grid record no longer exists.')); /** \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); return $resultRedirect->setPath('*/*/'); } } // 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); } // 4. Register model to use later in blocks $this->_coreRegistry->register('webkul_form_data', $model); // 5. Build edit form /** @var \Magento\Backend\Model\View\Result\Page $resultPage */ $resultPage = $this->_initAction(); $resultPage->addBreadcrumb( $id ? __('Edit Post') : __('New Grid'), $id ? __('Edit Post') : __('New Grid') ); $resultPage->getConfig()->getTitle()->prepend(__('Grids')); $resultPage->getConfig()->getTitle() ->prepend($model->getId() ? $model->getTitle() : __('New Grid')); return $resultPage; } }
18. Now, for edit page we create a layout file named grid_grid_edit.xml in app/code/Webkul/Grid/view/adminhtml/layout/
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd"> <head> <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/> </head> <update handle="editor"/> <body> <referenceContainer name="content"> <block class="Webkul\Grid\Block\Adminhtml\Grid\Edit" name="grid_grid_edit"/> </referenceContainer> <referenceContainer name="left"> <block class="Webkul\Grid\Block\Adminhtml\Grid\Edit\Tabs" name="grid_grid_edit_tabs"> <block class="Webkul\Grid\Block\Adminhtml\Grid\Edit\Tab\Main" name="grid_grid_edit_tab_main"/> <action method="addTab"> <argument name="name" xsi:type="string">main_section</argument> <argument name="block" xsi:type="string">grid_grid_edit_tab_main</argument> </action> </block> </referenceContainer> </body> </page>
19. Now our New/Edit Grid controller/Form is ready when you click your new menu (Webkul -> Webkul Grid View->Add New ) then your controller run and output display as following
and from here you can save new row of grid record and also edit them