4

I want to display certain column of grid based on condition,I need hint/suggestion.I used this tutorial for creating a grid in magneto2 https://ranasohel.me/2014/04/20/creating-magento2-adminhtml-grid/. I used ui_component for creating a grid.Because in magento 2 ui_component use xml to display grid.How can I add if else condition in magento 2 ui_compoenent grid.

for example like magento 1.x grid column

if($condition == true){
$this->addColumn('price', array(
 'header' => Mage::helper('adminhtml')->__('Price'),
 'index' => 'refund_amount',
 'width' => '80px',
 'column_css_class' => 'a-center',
 )); 
 }

app/code/Test/Testimonial/view/adminhtml/ui_component/testimonial_blog_listing.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">testimonial_blog_listing.testimonial_blog_listing_data_source</item>
 <item name="deps" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing_data_source</item>
 </item>
 <item name="spinner" xsi:type="string">testimonial_blog_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 testimonial</item>
 <item name="class" xsi:type="string">primary</item>
 <item name="url" xsi:type="string">*/*/new</item>
 </item>
 </item>
 </argument>
 <dataSource name="testimonial_blog_listing_data_source">
 <argument name="dataProvider" xsi:type="configurableObject">
 <argument name="class" xsi:type="string">PostGridDataProvider</argument>
 <argument name="name" xsi:type="string">testimonial_blog_listing_data_source</argument>
 <argument name="primaryFieldName" xsi:type="string">entity_id</argument>
 <argument name="requestFieldName" xsi:type="string">id</argument>
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="update_url" xsi:type="url" path="mui/index/render"/>
 </item>
 </argument>
 </argument>
 <argument name="data" xsi:type="array">
 <item name="js_config" xsi:type="array">
 <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
 </item>
 </argument>
 </dataSource>
 <container name="listing_top">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="template" xsi:type="string">ui/grid/toolbar</item>
 <item name="stickyTmpl" xsi:type="string">ui/grid/sticky/toolbar</item>
 </item>
 </argument>
 <bookmark name="bookmarks">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="storageConfig" xsi:type="array">
 <item name="namespace" xsi:type="string">testimonial_blog_listing</item>
 </item>
 </item>
 </argument>
 </bookmark>
 <component name="columns_controls">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="columnsData" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.testimonial_blog_columns</item>
 </item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
 <item name="displayArea" xsi:type="string">dataGridActions</item>
 </item>
 </argument>
 </component>
 <exportButton name="export_button">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="selectProvider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.testimonial_blog_columns.ids</item>
 </item>
 </argument>
 </exportButton>
 <filterSearch name="fulltext">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing_data_source</item>
 <item name="chipsProvider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.listing_top.listing_filters_chips</item>
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current.search</item>
 </item>
 </item>
 </argument>
 </filterSearch>
 <filters name="listing_filters">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="columnsProvider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.testimonial_blog_columns</item>
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current.filters</item>
 </item>
 <item name="templates" xsi:type="array">
 <item name="filters" xsi:type="array">
 <item name="select" xsi:type="array">
 <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
 <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
 </item>
 </item>
 </item>
 <item name="childDefaults" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.listing_top.listing_filters</item>
 <item name="imports" xsi:type="array">
 <item name="visible" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.testimonial_blog_columns.${ $.index }:visible</item>
 </item>
 </item>
 </item>
 <item name="observers" xsi:type="array">
 <item name="column" xsi:type="string">column</item>
 </item>
 </argument>
 </filters>
 <massaction name="listing_massaction">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="selectProvider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.testimonial_blog_columns.ids</item>
 <item name="indexField" xsi:type="string">entity_id</item>
 </item>
 </argument>
 <action name="delete">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="type" xsi:type="string">delete</item>
 <item name="label" xsi:type="string" translate="true">Delete</item>
 <item name="url" xsi:type="url" path="testimonial/blog/massDelete"/>
 <item name="confirm" xsi:type="array">
 <item name="title" xsi:type="string" translate="true">Delete items</item>
 <item name="message" xsi:type="string" translate="true">Are you sure you wan't to delete selected items?</item>
 </item>
 </item>
 </argument>
 </action>
 <action name="disable">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="type" xsi:type="string">disable</item>
 <item name="label" xsi:type="string" translate="true">Disable</item>
 <item name="url" xsi:type="url" path="testimonial/blog/massDisable"/>
 </item>
 </argument>
 </action>
 <action name="enable">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="type" xsi:type="string">enable</item>
 <item name="label" xsi:type="string" translate="true">Enable</item>
 <item name="url" xsi:type="url" path="testimonial/blog/massEnable"/>
 </item>
 </argument>
 </action>
 </massaction>
 <paging name="listing_paging">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current.paging</item>
 </item>
 <item name="selectProvider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.testimonial_blog_columns.ids</item>
 </item>
 </argument>
 </paging>
 </container>
 <columns name="testimonial_blog_columns">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.listing_top.bookmarks</item>
 <item name="namespace" xsi:type="string">current</item>
 </item>
 <item name="childDefaults" xsi:type="array">
 <item name="fieldAction" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.testimonial_blog_columns_editor</item>
 <item name="target" xsi:type="string">startEdit</item>
 <item name="params" xsi:type="array">
 <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
 <item name="1" xsi:type="boolean">true</item>
 </item>
 </item>
 <item name="storageConfig" xsi:type="array">
 <item name="provider" xsi:type="string">testimonial_blog_listing.testimonial_blog_listing.listing_top.bookmarks</item>
 <item name="root" xsi:type="string">columns.${ $.index }</item>
 <item name="namespace" xsi:type="string">current.${ $.storageConfig.root}</item>
 </item>
 </item>
 </item>
 </argument>
 <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">entity_id</item>
 </item>
 </argument>
 </selectionsColumn>
 <column name="entity_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <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="title">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <item name="editor" xsi:type="array">
 <item name="editorType" xsi:type="string">text</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 <item name="label" xsi:type="string" translate="true">Title</item>
 </item>
 </argument>
 </column>
 <column name="publish_date" class="Magento\Ui\Component\Listing\Columns\Date">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">dateRange</item>
 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
 <item name="dataType" xsi:type="string">date</item>
 <item name="label" xsi:type="string" translate="true">Publish Date</item>
 </item>
 </argument>
 </column>
 <column name="price">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <item name="editor" xsi:type="array">
 <item name="editorType" xsi:type="string">text</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 <item name="label" xsi:type="string" translate="true">Price</item>
 </item>
 </argument>
 </column>
 <actionsColumn name="actions" class="SR\testimonial\Ui\Component\Listing\Column\PostAction">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="indexField" xsi:type="string">entity_id</item>
 <item name="viewUrlPath" xsi:type="string">testimonial/blog/edit</item>
 <item name="urlEntityParamName" xsi:type="string">entity_id</item>
 </item>
 </argument>
 </actionsColumn>
 </columns>
</listing>
asked May 30, 2016 at 13:40
8
  • What kind of conditions ? Based on a configuration field ? Commented Jun 5, 2016 at 9:13
  • I want to if..else{} condition on ui_component based grid certain or column where I can hide column base on if else Commented Jun 5, 2016 at 9:16
  • I still don't understand the type of condition. Is that based on the value of a field ? Commented Jun 5, 2016 at 9:24
  • not value of field but if my condition true so it should display perticular column else not display that column.check my edited question Commented Jun 5, 2016 at 9:30
  • I added magento 1.x grid column example .I want like that in ui_component base grid in magneto 2 Commented Jun 5, 2016 at 9:33

1 Answer 1

11
+50

In your app/code/Test/Testimonial/view/adminhtml/ui_component/testimonial_blog_listing.xml

add in the column tag the class attribute:

 <column name="nameofyourcolumn" class="YourVendor\YourModule\Ui\Component\Listing\Column\MyColumn">

MyColumn class is:

<?php
namespace YourVendor\YourModule\Ui\Component\Listing\Column;
use Magento\Ui\Component\Listing\Columns\Column;
use Magento\Framework\DataObject;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
class MyColumn extends Column{
 public function __construct(
 ContextInterface $context,
 UiComponentFactory $uiComponentFactory,
 \Magento\Backend\Model\Auth\Session $authSession,
 array $components = [],
 array $data = []
 ) {
 if(!in_array(1,$authSession->getUser()->getRoles())){
 $data = [];
 }
 parent::__construct($context, $uiComponentFactory,$components, $data);
 }
}

in your case YourVendor/YourModule is equal to Test/Testimonial

in the $authSession variable you have all information about the authenticated user. In the if which you can read above, I want that if the authenticated user is not an administrator (1 is the ID of the administrators group for me) don't show the column. To achieve this I put an empty array in $data variable, which contains all data printed in the column, as result I don't see anymore the column.

answered Jun 5, 2016 at 11:13
2
  • Ok wait I am checking Commented Jun 5, 2016 at 11:58
  • Yes it is working thank you very much.You can award from this my question.plz help me in this url magento.stackexchange.com/questions/117980/… . I am in trouble in this question.I tried but not solved and not magento 2 upgrade.plz check Commented Jun 5, 2016 at 12:14

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.