Magento 2如何根据条件禁用类别属性?

Magento 2如何根据条件禁用类别属性?,magento,categories,magento2,backend,magento-2.3,Magento,Categories,Magento2,Backend,Magento 2.3,Magento 2如何根据条件禁用类别属性 以我为例, 我必须仅为L2类别启用category属性,在另一个类别中,它应该被禁用。在我的示例中,我必须仅为L2类别启用custom category属性,并且在另一个类别级别上,它应该被禁用 在自定义di.xml文件中添加此代码以扩展Magento\Catalog\Model\Category\DataProvider.php 扩展Magento\Catalog\Model\Category\DataProvider.php文件后,现在在自定义模

Magento 2如何根据条件禁用类别属性

以我为例,


我必须仅为L2类别启用category属性,在另一个类别中,它应该被禁用。

在我的示例中,我必须仅为L2类别启用custom category属性,并且在另一个类别级别上,它应该被禁用

  • 在自定义di.xml文件中添加此代码以扩展Magento\Catalog\Model\Category\DataProvider.php

  • 扩展
    Magento\Catalog\Model\Category\DataProvider.php
    文件后,现在在自定义模块中创建
    xyz\abc\Model\Notification\DataProvider.php
    文件,其中我们调用

  • `

    `

    在上面的代码中,我进行了定制以获取标志(do_we_hide_it)值,这样我们就可以在category_form.xml中使用该标志来启用/禁用category属性

    注意:请将函数convertValues($category,$categoryData)从
    Magento\Catalog\Model\category\DataProvider.php
    复制到
    xyz\abc\Model\Notification\DataProvider.php
    ,因为此函数是私有函数,因此无法扩展该函数

  • 因此,现在进入
    category\u form.xml(路径:xyz/abx/view/adminhtml/ui\u component/category\u form.xml)
    并将此代码添加到自定义category属性中
  • `

    
        
           ........
        
        
            
    ${$.provider}:data.we\u隐藏它吗
            
        
    
    `

  • php bin/magento缓存:刷新

  • 完成


  • 我非常感谢你出色的工作!继续努力!在StackExchange上也发布相同的内容。
    public function getData() {    
               if (isset($this->loadedData)) {    
                return $this->loadedData;    
            }
            $category = $this->getCurrentCategory();
    
            if ($category) {
                $categoryLevel = $category->getLevel();
                $categoryData = $category->getData();
                $categoryData = $this->addUseConfigSettings($categoryData);
                $categoryData = $this->filterFields($categoryData);
                $categoryData = $this->convertValues($category, $categoryData);
    
                $this->loadedData[$category->getId()] = $categoryData;
    //Customization Started
                if( $categoryLevel == 2 )  
                    $this->loadedData[$category->getId()]['do_we_hide_it'] = false;
                else
                    $this->loadedData[$category->getId()]['do_we_hide_it'] = true;
    //Customization ended
            }
            return $this->loadedData;
    }
    
    <field name="your_custom_attibute_name">
        <argument name="data" xsi:type="array">
           ........
        </argument>
    <!-- Customization Started -->
        <settings>
            <imports>
                <link name="disabled">${ $.provider}:data.do_we_hide_it</link>
            </imports>
        </settings>
    <!-- Customization ended -->
    </field>