Magento 2如何根据条件禁用类别属性。
在我的示例中,
我只能为L2类别启用类别属性,而在另一个类别,则应将其禁用。
在我的示例中,我只必须为L2类别启用自定义类别属性,而在另一个类别级别,则应将其禁用。
在您的自定义di.xml文件中,添加以下代码以扩展Magento \ Catalog \ Model \ Category \ DataProvider.php
<preference for="Magento\Catalog\Model\Category\DataProvider" type="xyz\abc\Model\Notification\DataProvider" />
在扩展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
,因为此函数是私有的,因此无法扩展该函数。
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>
`
php bin / magento缓存:刷新
完成