Чтобы добавить настраиваемое массовое действие в сетку пользовательского интерфейса на основе некоторых условий, вы можете использовать пользовательский класс для пользовательского компонента массовых операций:
<!--/app/code/YourNamespace/YourModule/view/adminhtml/ui_component/product_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">
<listingToolbar name="listing_top">
<massaction name="listing_massaction" class="YourNamespace\YourModule\Ui\CustomMassAction"/>
</listingToolbar>
</listing>
И реализовать этот класс, расширяя основной компонент из модуля Magento_Ui.
namespace YourNamespace\YourModule\Ui;
use Magento\Ui\Component\MassAction;
class CustomMassAction extends MassAction
{
public function prepare()
{
parent::prepare();
if ($this->isEnabled()) {
$config = $this->getConfiguration();
$config['actions'][] = [
'component' => 'uiComponent',
'type' => 'custom',
'label' => 'Custom',
'url' => '//google.com'
];
$this->setData('config', $config);
}
}
public function isEnabled()
{
return true; // access your configuration here
}
}
В качестве альтернативы вы можете применить обратный подход :). Укажите конфигурацию для вашего массового использования product_listing.xmlи удалите действие из конфигурации в пользовательском классе массовых операций, если он отключен в вашей конфигурации.
Еще один способ настроить массовые действия - добавить плагин для Magento\Ui\Component\MassAction::prepare.