Hello Everyone,
In this blog, we will learn about how to display an Image in the Admin UI Grid in Magento 2.
Without wasting your time, let us guide you straight away. Follow the easy step given below to Create UI Component Grid in Magento 2.
STEPS FOR DISPLAY AN IMAGE IN ADMIN UI GRID IN MAGENTO 2
Step 1: Open ui_listing.xml file
We have already created this file and opened this file and image column.
app/code/Vendor/Extension/view/adminhtml/ui_component/ui_listing.xml
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="provider" xsi:type="string">ui_listing.ui_listing_data_source</item>
<item name="deps" xsi:type="string">ui_listing.ui_listing_data_source</item>
</item>
<item name="spinner" xsi:type="string">columns</item>
<item name="buttons" xsi:type="array">
<item name="add" xsi:type="array">
<item name="name" xsi:type="string">add</item>
<item name="label" xsi:type="string" translate="true">Add New Record</item>
<item name="class" xsi:type="string">primary</item>
<item name="url" xsi:type="string">*/*/form</item>
</item>
</item>
</argument>
<dataSource name="ui_listing_data_source">
<argument name="dataProvider" xsi:type="configurableObject">
<argument name="class" xsi:type="string">Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider</argument>
<argument name="name" xsi:type="string">ui_listing_data_source</argument>
<argument name="primaryFieldName" xsi:type="string">id</argument>
<argument name="requestFieldName" xsi:type="string">id</argument>
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
<item name="update_url" xsi:type="url" path="mui/index/render" />
<item name="storageConfig" xsi:type="array">
<item name="indexField" xsi:type="string">id</item>
</item>
</item>
</argument>
</argument>
</dataSource>
<listing>
<listingToolbar>
<bookmark name="bookmarks" />
<columnsControls name="columns_controls" />
<filters>
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="applied" xsi:type="array">
<item name="is_approved" xsi:type="string">1</item>
</item>
</item>
</argument>
</filters>
<paging name="listing_paging" />
</listingToolbar>
</listing>
<columns name="columns">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="resizeConfig" xsi:type="array">
<item name="enabled" xsi:type="boolean">false</item>
</item>
</item>
</argument>
<settings>
<childDefaults>
<param name="fieldAction" xsi:type="array">
<item name="provider" xsi:type="string">ui_listing.ui_listing.columns.actions</item>
<item name="target" xsi:type="string">applyAction</item>
<item name="params" xsi:type="array">
<item name="0" xsi:type="string">edit</item>
<item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
</item>
</param>
</childDefaults>
</settings>
<selectionsColumn name="ids">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="resizeEnabled" xsi:type="boolean">false</item>
<item name="resizeDefaultWidth" xsi:type="string">55</item>
<item name="indexField" xsi:type="string">id</item>
</item>
</argument>
</selectionsColumn>
<column name="id">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="resizeEnabled" xsi:type="boolean">false</item>
<item name="resizeDefaultWidth" xsi:type="string">55</item>
<item name="filter" xsi:type="string">textRange</item>
<item name="sorting" xsi:type="string">asc</item>
<item name="label" xsi:type="string" translate="true">ID</item>
</item>
</argument>
</column>
<column name="field_1">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Field 1</item>
</item>
</argument>
</column>
<column name="field_2">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Field 2</item>
</item>
</argument>
</column>
<column name="image" class="Vendor\Extension\Ui\Component\Listing\Helloworld\Thumbnail">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
<item name="filter" xsi:type="string">textarea</item>
<item name="label" translate="true" xsi:type="string">Image Field</item>
<item name="has_preview" xsi:type="string">1</item>
<item name="altField" xsi:type="string">name</item>
</item>
</argument>
</column>
<actionsColumn name="actions" class="Vendor\Extension\Ui\Component\Column\Actions">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="indexField" xsi:type="string">id</item>
</item>
</argument>
</actionsColumn>
</columns>
</listing>
Step 2: Create Thumbnail.php file
<?php
namespace Vendor\Extension\Ui\Component\Listing\Helloworld;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
class Thumbnail extends \Magento\Ui\Component\Listing\Columns\Column {
/**
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param \Magento\Framework\UrlInterface $urlBuilder
* @param array $components
* @param array $data
*/
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
\Magento\Framework\UrlInterface $urlBuilder,
array $components = [],
array $data = []
) {
parent::__construct($context, $uiComponentFactory, $components, $data);
$this->urlBuilder = $urlBuilder;
}
/**
* Prepare Data Source
*
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource) {
if (isset($dataSource['data']['items'])) {
$fieldName = $this->getData('name');
foreach ($dataSource['data']['items'] as &$item) {
if ($item['image_field']) {
$imageUrl = $this->urlBuilder->getBaseUrl().'pub/media/wysiwyg/helloworld/'. $item['image_field'];
$item[$fieldName . '_src'] = $imageUrl;
$item[$fieldName . '_alt'] = $item['image_field'];
$item[$fieldName . '_link'] = $this->urlBuilder->getUrl(
'helloworld/index/form',
['id' => $item['id']]);
$item[$fieldName . '_orig_src'] = $imageUrl;
}
}
}
return $dataSource;
}
}
Step 3: Finally run the below commands
$ php bin/magento cache:clean
$ php bin/magento cache:flush
Step 4: Output:
Final Thoughts:
So this was the easiest way which we have told you in this blog. This is how you can display images in the Admin UI Component Grid in Magento 2. Hope you liked the blog.
So quickly go to the comment box and tell me how you like this blog?
Stay tuned with us on our site to get new updates of Magento.
Thanks for reading and visiting our site.
