Как добавить массовость в сетке товаров в magento2?

8

Мне нужно добавить массовое действие на основе настроек.

Если в настройках конфигурации установлено значение «Да / Включить», то в сетку продукта следует добавить только это конкретное массовое действие.

Я знаю, что могу напрямую добавить массовое действие, используя ui_component product_listing.xml. ? Но дело в том, как проверить настройки конфигурации и добавить или удалить на основе этого?

Капил Карангея
источник
Также, если это невозможно с ui_component - product_listing.xml, я думаю, что другой способ сделать это с помощью наблюдателя событий. но, опять же, я не могу сделать это ни в одном случае с наблюдателем событий.
Капил Карангея
Я пытался сделать это с помощью плагина, но безуспешно. Я не знаю, как отключить actionэлемент внутри дочерних компонентов массового действия. Если мое исследование вам интересно, я могу опубликовать его в качестве ответа позже.
Сергей Учухлебау
Для наблюдателя событий, пожалуйста, проверьте этот вопрос magento.stackexchange.com/questions/148638/…
Kapil Karangeeya
@SiarheyUchukhlebau Означает, что вы хотите удалить элемент из выпадающего списка массовых действий.?
Капил Карангея
Да, я пытался это сделать, но безуспешно :(
Сергей Учухлебау

Ответы:

1

Чтобы добавить настраиваемое массовое действие в сетку пользовательского интерфейса на основе некоторых условий, вы можете использовать пользовательский класс для пользовательского компонента массовых операций:

<!--/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.

Сергей Иващенко
источник
0

Вы можете добавить массовые действия в сетку администратора Magento 2, используя следующий XML в XML-файле сетки:

<listingToolbar name="listing_top">
    <settings>
        <sticky>true</sticky>
    </settings>
    <bookmark name="bookmarks"/>
    <columnsControls name="columns_controls"/>
    <filters name="listing_filters"/>
    <paging name="listing_paging"/>
    <massaction name="listing_massaction">
        <action name="update_status">
            <settings>
                <type>update_status</type>
                <label translate="true">Update status</label>
                <actions class="{Namespace}\{Module}\Ui\Component\MassAction\Status\Options"/>
            </settings>
        </action>
        <action name="delete">
            <settings>
                <confirm>
                    <message translate="true">Are you sure to delete selected items?</message>
                    <title translate="true">Delete items</title>
                </confirm>
                <url path="{frontname}/{controller}/{action}"/>
                <type>delete</type>
                <label translate="true">Delete</label>
            </settings>
        </action>
        ...
    </massaction>
    ...
</listingToolbar>

Затем вам необходимо создать свой собственный контроллер и класс действий, если это необходимо. Как добавить массовое действие в сетку админки Magento 2? подробно объясняет, как добавить массовые действия в вашу сетку администрирования Magento 2.

hungersoft
источник