0

How to create a listing grid using UI component in the backend without a database ?

3
  • do u want to get data from array?? Sep 4 '19 at 4:59
  • anyway, Just don't use the database, please give me a solution. Thank for reply.
    – MichaelHa
    Sep 4 '19 at 5:05
  • please Check My Answer...... Sep 4 '19 at 5:22
0

in Your

Vendor\Module\Ui\DataProvider\DataProvider.php

use Magento\Framework\App\Request\Http;
use Magento\Ui\DataProvider\AbstractDataProvider;

/**
 * Class DataProvider
 */
class DataProvider extends AbstractDataProvider
{

    /**
     * @var \Magento\Ui\DataProvider\AddFieldToCollectionInterface[]
     */
    private $addFieldStrategies;

    /**
     * @var \Magento\Ui\DataProvider\AddFilterToCollectionInterface[]
     */
    private $addFilterStrategies;

    /**
     * Media path to extension images
     *
     * @var string
     */

    private $collectionFactory;

    /**
     * Media path to extension images
     *
     * @var string
     */

    private $saveImage;
    /**
     * Construct
     *
     * DataProvider constructor.
     * @param string $name
     * @param string $primaryFieldName
     * @param string $requestFieldName
     */
    public function __construct(
        \Magento\Framework\Api\Search\SearchCriteriaBuilder $searchCriteriaBuilder,
        $name,
        $primaryFieldName,
        $requestFieldName,
        Http $request,
        CollectionFactory $collectionFactory,
        array $meta = [],
        array $data = []
    ) {
        $this->searchCriteriaBuilder = $searchCriteriaBuilder;
        $this->request               = $request;
        parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
    }

    /**
     * Preparing Collection For Grid
     *
     * @return Array
     */

    public function getCollection()
    {
        //Put Your Data in this Variable
        $data  = 
        //Default Objects
        $pagesize    = intval($this->request->getParam('paging')['pageSize']);
        $pageCurrent = intval($this->request->getParam('paging')['current']);
        $pageoffset  = ($pageCurrent - 1) * $pagesize;
        return [
            'totalRecords' => count($data),
            'items'        => array_slice($data, $pageoffset, $pageoffset + $pagesize),
        ];
    }

    /**
     * Return Prepared Data To Admin Grid
     *
     * @return AbstractDataProvider
     */

    public function getData()
    {
        if (!$this->getCollection()) {
            $this->getCollection();
        }
        return $this->getCollection();
    }

    /**
     *  Adding Filters To Grid Collection
     *
     */

    public function addFilter(\Magento\Framework\Api\Filter $filter)
    {
        $this->searchCriteriaBuilder->addFilter($filter);
    }

    /**
     * Adding Order To Grid Collection
     *
     */

    public function addOrder($field, $direction)
    {
        $this->searchCriteriaBuilder->addSortOrder($field, $direction);
    }

    /**
     * Set Limit To Admin Collection
     *
     */

    public function setLimit($offset, $size)
    {
        $this->searchCriteriaBuilder->setPageSize($size);
        $this->searchCriteriaBuilder->setCurrentPage($offset);
    }
}

Now in

Vendor\Module\view\adminhtml\ui_component\frontname_module_controller.xml

<argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">Vendor\Module\Ui\DataProvider\DataProvider.</argument>
        </argument>

Hope this will help You

9
  • Please give me full solution. Thank you.
    – MichaelHa
    Sep 4 '19 at 6:35
  • what type of data you want to show in Grid Sep 4 '19 at 6:37
  • simply text. I just need a grid.
    – MichaelHa
    Sep 4 '19 at 6:39
  • ho much coloums do u have how mays rows you want then i can give you a Good solution Sep 4 '19 at 6:42
  • maybe 5 columns.
    – MichaelHa
    Sep 4 '19 at 6:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.