I am trying to create module in magento2, now i stuck creating grid page in admin side, let me know if any one already did
Magento2 Admin – How to Create an Admin Grid
adminadminhtmlgridmagento2magento2-dev-beta
Related Solutions
You need to use a 'renderer' to generate your column data. This allows you to render out HTML (or anything else) as you column data so you can build things like dropdowns and multiselects. If you use that and want to search by that column, you will probably also want to look at the 'filter_condition_callback'. This allows you to call a custom method when searching by a column.
This seems to be a reasonable, quick summary of the subject.
First of all, we need to define the action node in your ui xml.
<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
......
<columns name="rent_columns">
......
<actionsColumn name="actions" class="Vendor\Module\Ui\Component\Listing\Column\Actions">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="indexField" xsi:type="string">entity_id</item>
</item>
</argument>
</actionsColumn>
</columns>
</listing>
Build the action class:
app/code/Vendor/Module/Ui/Component/Listing/Column/Actions.php
<?php
namespace Vendor\Module\Ui\Component\Listing\Column;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Ui\Component\Listing\Columns\Column;
use Vendor\Module\Block\Adminhtml\Module\Grid\Renderer\Action\UrlBuilder;
use Magento\Framework\UrlInterface;
class Actions extends Column
{
/** Url path */
const URL_PATH_EDIT = 'your/url/edit';
const URL_PATH_DELETE = 'your/url/delete';
/** @var UrlBuilder */
protected $actionUrlBuilder;
/** @var UrlInterface */
protected $urlBuilder;
/**
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param UrlBuilder $actionUrlBuilder
* @param UrlInterface $urlBuilder
* @param array $components
* @param array $data
*/
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
UrlBuilder $actionUrlBuilder,
UrlInterface $urlBuilder,
array $components = [],
array $data = []
) {
$this->urlBuilder = $urlBuilder;
$this->actionUrlBuilder = $actionUrlBuilder;
parent::__construct($context, $uiComponentFactory, $components, $data);
}
/**
* Prepare Data Source
*
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource)
{
if (isset($dataSource['data']['items'])) {
foreach ($dataSource['data']['items'] as & $item) {
$name = $this->getData('name');
if (isset($item['entity_id'])) {
$item[$name]['edit'] = [
'href' => $this->urlBuilder->getUrl(self::URL_PATH_EDIT, ['entity_id' => $item['entity_id']]),
'label' => __('Edit')
];
$item[$name]['delete'] = [
'href' => $this->urlBuilder->getUrl(self::URL_PATH_DELETE, ['entity_id' => $item['entity_id']]),
'label' => __('Delete'),
'confirm' => [
'title' => __('Delete ${ $.$data.title }'),
'message' => __('Are you sure you wan\'t to delete a ${ $.$data.title } record?')
]
];
}
}
}
return $dataSource;
}
}
Url builder class:
app/code/Vendor/Module/Block/Adminhtml/Module/Grid/Renderer/Action/UrlBuilder.php
<?php
namespace Vendor\Module\Block\Adminhtml\Module\Grid\Renderer\Action;
class UrlBuilder
{
/**
* @var \Magento\Framework\UrlInterface
*/
protected $frontendUrlBuilder;
/**
* @param \Magento\Framework\UrlInterface $frontendUrlBuilder
*/
public function __construct(\Magento\Framework\UrlInterface $frontendUrlBuilder)
{
$this->frontendUrlBuilder = $frontendUrlBuilder;
}
/**
* Get action url
*
* @param string $routePath
* @param string $scope
* @param string $store
* @return string
*/
public function getUrl($routePath, $scope, $store)
{
$this->frontendUrlBuilder->setScope($scope);
$href = $this->frontendUrlBuilder->getUrl(
$routePath,
['_current' => false, '_query' => '___store=' . $store]
);
return $href;
}
}
Remember to create the controller actions
We need to create the controller actions:
/** Url path */
const URL_PATH_EDIT = 'your/url/edit';
const URL_PATH_DELETE = 'your/url/delete';
Best Answer
Finally Grid is done with Ui Component Below are the steps and files which are need for grid with filter option.
First we need to create index action layout xml that is:
Sugarcode\Test\view\adminhtml\layout\test_lists_index.xml
Second file is ui component xml that is if we use this xml no need Grid.php every thing is configured from this xml only
code\Sugarcode\Test\view\adminhtml\ui_component\test_lists_listing.xml
we need to mention few tags for data provider in di.xml
To achieve filters we need DataProvider which will be inside Model//DataProvider.php which is mentioned in test_lists_listing.xml that is
app\code\Magento\Cms\Model\Block\DataProvider.php
if you have mass delete option then need to create massdelete action file in controller that is app\code\Sugarcode\Test\Controller\Adminhtml\Lists\MassDelete.php
Till here you can filter, sort option and mass action is done and its working fine but full text search is not working if that is fixed full grid is ready can any one help me to fix that issue .