Magento 2如何在条件上禁用类别属性?

问题描述 投票:0回答:1

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

在我的示例中,

我只能为L2类别启用类别属性,而在另一个类别,则应将其禁用。

magento categories magento2 backend magento-2.3
1个回答
1
投票

在我的示例中,我只必须为L2类别启用自定义类别属性,而在另一个类别级别,则应将其禁用。

  1. 在您的自定义di.xml文件中,添加以下代码以扩展Magento \ Catalog \ Model \ Category \ DataProvider.php

    <preference for="Magento\Catalog\Model\Category\DataProvider" type="xyz\abc\Model\Notification\DataProvider" />

  2. 在扩展Magento\Catalog\Model\Category\DataProvider.php文件后,现在在您的自定义模块中创建xyz\abc\Model\Notification\DataProvider.php文件,在其中我们将getData()函数称为

`

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;
}

`

在上面的代码中,我已经完成了自定义以获取标志(do_we_hide_it)的值,因此我们可以在category_form.xml中使用此标志来启用/禁用类别属性。

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

  1. 所以现在转到category_form.xml (path: xyz/abx/view/adminhtml/ui_component/category_form.xml),然后将此代码添加到您的自定义类别属性中。

`

<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>

`

  1. php bin / magento缓存:刷新

  2. 完成

© www.soinside.com 2019 - 2024. All rights reserved.