Skip to main content

Magento 2 - Add admin grid page


In magento 2, we can add grid by mainly two types. First is to add it via the grid.php and other via xml file. Here we will go through, how to add it via grid file. You can find the sample code in the git repo.

Add the files as per the blog post. Now we need to convert the block file mentioned in the controller to grid format.

The block file will look as below.
namespace VendorName\ModuleName\Block\Adminhtml;

class BlockName extends \Magento\Backend\Block\Widget\Grid\Container {

    protected function _construct() {
        $this->_controller = 'adminhtml_blockname';
        $this->_blockGroup = 'VendorName_ModuleName';
        $this->_headerText = __('Header Text');
        parent::_construct();
    }

}


Now, inside the Adminhtml folder, create a folder called Blockname and file Grid.php inside it. Create a model or use an existing model. Check the blog to create new model.
namespace VendorName\ModuleName\Block\Adminhtml\Blockname;

use \Magento\Backend\Block\Widget\Grid\Extended as ExtendGrid;
use Magento\Backend\Block\Template\Context;
use Magento\Backend\Helper\Data as BackendHelper;
use VendorName\ModuleName\Model\ResourceModel\Mymodel\CollectionFactory;

class Grid extends ExtendGrid {

    protected $_collectionFactory;

    public function __construct(Context $context, BackendHelper $backendHelper, CollectionFactory $collectionFactory, array $data = []) {
        $this->_collectionFactory = $collectionFactory;
        $this->_module = 'VendorName_ModuleName';
        parent::__construct($context, $backendHelper, $data);

        $this->setId('unique_name');
        $this->setUseAjax(false);
        $this->setDefaultSort('filename');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
    }

    protected function _prepareCollection() {
        $collection = $this->_collectionFactory->create();
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

    protected function _prepareColumns() {
        //same as the magento 1 code
        $this->addColumn(
            'attribute_code',
            [
                'header' => __('Attribute Code'),
                'sortable' => true,
                'index' => 'attribute_code',
            ]
        );

        return parent::_prepareColumns();
    }

    protected function _prepareMassaction() {
        $this->setMassactionIdField('entity_id');
        $this->getMassactionBlock()->setFormFieldName('update_ids');
        $this->getMassactionBlock()->setUseSelectAll(false);

        $this->getMassactionBlock()->addItem('update', [
            'label' => __('Update Selected'),
            'url' => $this->getUrl('*/*/updateMassaction'),
        ]);

        return $this;
    }

    public function getRowUrl($row) {
        return $this->getUrl($this->_module . '/*/edit', ['id' => $row->getId()]);
    }

}

Comments

Popular posts from this blog

Magento 2 - Create Attributes in Setup

Sometimes in our module we require to create product or category attributes automatically on module install. Also, we might require to add extra fields to quote, sales order, invoice, creditmemo tables. We will go through how to do that in magento 2. You can find the sample code in the git repo .