Magento2 : Block

Before Creating Block you have to create basic module structure Admin Module in Magento2 
Create file view.php
namespace NameSpace\ModelName\Block\Adminhtml\FolderName\Sales;
use Magento\Backend\Block\Widget\Form\Container;
use Magento\Backend\Block\Widget\Context;
use Magento\Framework\Registry;
class View extends Container 
{

    protected $_coreRegistry = null;
    protected $_mode = 'view';
    protected $helperData;

    
    public function __construct(
    Context $context, 
    \NameSpace\ModelName\Helper\Data $helperData,        
    Registry $registry, 
    array $data = []
    ) 
    {
        $this->_coreRegistry = $registry;
        $this->helperData = $helperData;
        parent::__construct($context, $data);
    }

    protected function _construct() 
    {
        
        $this->_objectId = 'id';
        $this->_controller = 'adminhtml_FolderName_sales';
        $this->_blockGroup = 'NameSpace_ModelName';

        parent::_construct();
        $this->removeButton('save');
        $this->removeButton('back');
        $this->removeButton('reset');

        $this->addButton(
                'btnId', [
            'label' => __('Btn Name'),
            'class' => 'primary'
                ], -1
        );     
    }
}

Create File Tabs.php
namespace NameSpace\ModuleName\Block\Adminhtml\FolderName\View;
class Tabs extends \Magento\Backend\Block\Widget\Tabs 
{
    protected function _construct() 
    {
       
        parent::_construct();
        $this->setId('FolderName_tabs');
        $this->setDestElementId('view_form');
        $this->setTitle(__('Title'));
    }

    protected function _beforeToHtml() 
    {
        $this->addTab(
                'tab1', [
            'label' => __('TAB 1'),
            'title' => __('TAB 1'),
            'url' => $this->getUrl('ModuleName/*/controllerName', ['_current' => true]),
            'class' => 'ajax'
                ]
        );
        
        $this->addTab(
                'tab2', [
            'label' => __('TAB 2'),
            'title' => __('TAB 2'),
            'url' => $this->getUrl('ModuleName/*/controllerName'),
            'class' => 'ajax'
                ]
        );
 
        return parent::_beforeToHtml();
    }
}
Inside Tab create grid
namespace NameSpace\ModuleName\Block\Adminhtml\FolderName\View\Tab;
class functionalgrid extends \Magento\Backend\Block\Widget\Grid\Extended 
{
    protected $ModelNameFactory;
    protected $helper;
    protected $coreRegistry;

    public function __construct(
    \Magento\Backend\Block\Template\Context $context, 
    \Magento\Backend\Helper\Data $backendHelper, 
    \NameSpace\ModuleName\Model\ModelNameFactory $ModelNameFactory, 
    \Magento\Framework\Registry $coreRegistry, 
    \NameSpace\ModuleName\Helper\Data $helper,        
     array $data = []
    ) 
    {
        $this->ModelNameFactory = $ModelNameFactory;
        $this->coreRegistry = $coreRegistry;
        $this->helper = $helper;
        parent::__construct($context, $backendHelper, $data);
    }
    
    protected function _construct() 
    {
        parent::_construct();
        $this->setId('FolderName_tab_grid');
        $this->setDefaultSort('entity_id');
        $this->setUseAjax(true);
    }
    

    protected function _addColumnFilterToCollection($column) 
    {
        parent::_addColumnFilterToCollection($column);
    }

    protected function _prepareCollection()
    {
        $collection = $this->ModelNameFactory->create()->getCollection(); 
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }
    
    protected function _prepareColumns() 
    {
       $this->addColumn(
                'entity_id', [
            'header' => __('Id'),
            'sortable' => true,
            'index' => 'entity_id',
            'header_css_class' => 'col-id',
            'column_css_class' => 'col-id'
                ]
        );
        
        $this->addColumn(
                'col_id', [
            'header' => __('Col Name'),
            'index' => 'dbcol_name',
            'renderer' =>  \NameSpace\ModuleName\Block\Adminhtml\FolderName\Renderer\Renderer::class              
        );
        
        return parent::_prepareColumns();
    }

    public function getGridUrl() 
    {
        return $this->getUrl('*/*/controllerName', ['_current' => true]);
    }

}
For Renderer Click here

Comments