Wie füge ich in magento2 eine Massage im Produktraster hinzu?

8

Ich muss Massenaktionen basierend auf Einstellungen hinzufügen.

Wenn in den Konfigurationseinstellungen "Ja / Aktivieren" festgelegt ist, sollte nur diese bestimmte Massenaktion zum Produktraster hinzugefügt werden.

Ich weiß, dass ich mit ui_component product_listing.xml direkt Massenaktionen hinzufügen kann. ? Aber wie kann man die Konfigurationseinstellungen überprüfen und basierend darauf hinzufügen oder entfernen?

Kapil Karangeeya
quelle
Auch wenn dies mit ui_component - product_listing.xml nicht möglich ist, ist es meiner Meinung nach anders, dies mit dem Ereignisbeobachter zu tun. aber auch hier kann ich es mit dem ereignisbeobachter nicht so oder so machen.
Kapil Karangeeya
Ich habe versucht, es mit einem Plugin zu tun, aber erfolglos. Ich weiß nicht, wie ich das actionElement in den untergeordneten Komponenten der Massenaktion deaktivieren soll . Wenn meine Forschung für Sie interessant ist, kann ich sie später als Antwort veröffentlichen.
Siarhey Uchukhlebau
Für Ereignisbeobachter überprüfen Sie bitte diese Frage magento.stackexchange.com/questions/148638/…
Kapil Karangeeya
@SiarheyUchukhlebau Bedeutet, dass Sie einen Gegenstand aus dem Dropdown-Menü für Massenaktionen entfernen möchten.
Kapil Karangeeya
Ja, ich habe versucht, es zu schaffen, aber ohne Erfolg :(
Siarhey Uchukhlebau

Antworten:

1

Um eine benutzerdefinierte Massenaktion zum UI-Raster basierend auf einer bestimmten Bedingung hinzuzufügen, können Sie eine benutzerdefinierte Klasse für die Massaktions-UI-Komponente verwenden:

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

Implementieren Sie diese Klasse, indem Sie die Kernkomponente des Magento_Ui-Moduls erweitern.

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

Alternativ können Sie den umgekehrten Ansatz anwenden :). Geben Sie die Konfiguration für Ihre Massage in an product_listing.xmlund entfernen Sie Ihre Aktion aus der Konfiguration in der benutzerdefinierten Massaktionsklasse, wenn sie in Ihrer Konfiguration deaktiviert ist.

Eine andere Möglichkeit, Massenaktionen anzupassen, ist das Hinzufügen eines Plugins für Magento\Ui\Component\MassAction::prepare.

Sergii Ivashchenko
quelle
0

Sie können dem Magento 2-Administratorraster Massenaktionen hinzufügen, indem Sie das folgende XML in der Raster-XML-Datei verwenden:

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

Sie müssen dann bei Bedarf Ihre eigene Controller- und Aktionsklasse erstellen. Wie füge ich dem Magento 2-Administratorraster Massenaktionen hinzu? erklärt ausführlich, wie Sie Ihrem Magento 2-Administratorraster Massenaktionen hinzufügen.

hungersoft
quelle