Comment ajouter massaction dans la grille de produits dans magento2?

8

Je dois ajouter une action de masse en fonction des paramètres.

Si dans les paramètres de configuration, il est défini sur "Oui / Activer", seule cette action de masse particulière doit être ajoutée à la grille du produit.

Je sais que je peux directement ajouter une action de masse en utilisant ui_component product_listing.xml. ? Mais le cas est de savoir comment vérifier les paramètres de configuration et ajouter ou supprimer en fonction de cela?

Kapil Karangeeya
la source
Aussi, si ce n'est pas possible avec ui_component - product_listing.xml, que l'autre façon, je pense, est de le faire avec l'observateur d'événements. mais encore une fois, je ne suis pas en mesure de le faire de toute façon avec l'observateur d'événements également.
Kapil Karangeeya
J'ai essayé de le faire en utilisant un plugin, mais sans succès. Je ne sais pas comment désactiver l' actionélément à l'intérieur des composants enfants de l'action de masse. Si ma recherche vous intéresse, je pourrai la poster comme réponse plus tard.
Siarhey Uchukhlebau
Pour l'observateur d'événements, veuillez vérifier cette question magento.stackexchange.com/questions/148638/…
Kapil Karangeeya
@SiarheyUchukhlebau Signifie que vous souhaitez supprimer un élément du menu déroulant d'action de masse.?
Kapil Karangeeya
Oui, j'ai essayé de le faire, mais sans succès :(
Siarhey Uchukhlebau

Réponses:

1

Pour ajouter une action de masse personnalisée à la grille d'interface utilisateur en fonction d'une condition, vous pouvez utiliser une classe personnalisée pour le composant d'interface utilisateur de massaction:

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

Et implémentez cette classe en étendant le composant principal à partir du module 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
    }
}

Alternativement, vous pouvez appliquer l'approche vice-versa :). Spécifiez la configuration de votre massaction dans product_listing.xmlet supprimez votre action de la configuration dans la classe de massaction personnalisée si elle est désactivée dans votre configuration.

Une autre façon de personnaliser les actions de masse consiste à ajouter un plugin pour Magento\Ui\Component\MassAction::prepare.

Sergii Ivashchenko
la source
0

Vous pouvez ajouter des actions de masse à la grille d'administration de Magento 2 en utilisant le XML suivant dans le fichier XML de la grille:

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

Vous devez ensuite créer votre propre contrôleur et classe d'actions si nécessaire. Comment ajouter une action de masse à la grille d'administration de Magento 2? explique en détail comment ajouter des actions de masse à votre grille d'administration Magento 2.

Hungersoft
la source