I have a UI component defining field, I want to display this field while edit existing product, and hide this field when add new product.
Namespace\Modulename\view\adminhtml\ui_component\product_form
<fieldset name="vendorproduct"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="label" xsi:type="string" translate="true">Seller Sell This Product</item> <item name="collapsible" xsi:type="boolean">true</item> <item name="sortOrder" xsi:type="number">65</item> </item> </argument> <container name="vendor_data" > <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="sortOrder" xsi:type="number">10</item> </item> </argument> <htmlContent name="html_content"> <argument name="block" xsi:type="object">Namespace\Modulename\Block\Adminhtml\Catalog\Product\Edit\Tab\Seller</argument> </htmlContent> </container> </fieldset>
Using
<item name="disabled" xsi:type="boolean">true</item>
I can disable fields but I want to disable them while adding new product only. how can I achieve this.
Hello @Patel_Chirag
you need to create the plugin for that into adminhtml folde
<preference for="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AttributeSet" type="CompanyName\Modulename\Ui\DataProvider\Product\Form\Modifier\AttributeSet" />
In that AttributeSet.php
<?php namespace CompanyName\ModuelName\Ui\DataProvider\Product\Form\Modifier; use Magento\Catalog\Model\Locator\LocatorInterface; use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory; use Magento\Framework\UrlInterface; /** * Add "Attribute Set" to first fieldset */ class AttributeSet extends \Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AttributeSet { protected $_dataHelper; /** * @param LocatorInterface $locator * @param CollectionFactory $attributeSetCollectionFactory * @param UrlInterface $urlBuilder */ public function __construct( LocatorInterface $locator, CollectionFactory $attributeSetCollectionFactory, UrlInterface $urlBuilder, ) { parent::__construct($locator,$attributeSetCollectionFactory,$urlBuilder); } public function modifyMeta(array $meta) { $meta = parent::modifyMeta($meta); unset($meta['product-details']['children']['container_product_supplier_select']); //here you need to find own meta and unset that, before that you need to get product id from url. }
Hope it will help you.
Hello @Patel_Chirag
are you facing any issue still?
Hello @Patel_Chirag ,
You can override getMeta() function in your DataProvider class
public function getMeta() { $meta = parent::getMeta(); $id = $this->request->getParam('entity_id'); if(isset($id)){ $meta['fieldset_name']['children']['field_name']['arguments']['data']['config']['visible'] = 1; } else{
$meta['fieldset_name']['children']['field_name']['arguments']['data']['config']['visible'] = 0; } return $meta; }
Problem solved? Click Kudos & Accept as Solution!
This worked for me.