Bagaimana cara menambahkan massaction di kisi produk di magento2?

8

Saya perlu menambahkan aksi massal berdasarkan Pengaturan.

Jika dalam pengaturan Konfigurasi, ini diatur ke "Ya / Aktifkan" daripada hanya tindakan massal tertentu yang harus ditambahkan ke kisi produk.

Saya tahu saya bisa langsung menambahkan aksi massa menggunakan ui_component product_listing.xml. ? Tetapi kasusnya adalah bagaimana memeriksa pengaturan konfigurasi dan menambah atau menghapus berdasarkan itu?

Kapil Karangeeya
sumber
Juga jika tidak memungkinkan dengan ui_component - product_listing.xml, daripada cara lain yang saya pikir adalah melakukannya dengan pengamat acara. tapi sekali lagi saya tidak bisa melakukannya dengan cara apa pun dengan pengamat acara juga.
Kapil Karangeeya
Saya mencoba melakukannya menggunakan plugin, tetapi tidak berhasil. Saya tidak tahu cara menonaktifkan actionelemen di dalam komponen turunan dari aksi massa. Jika penelitian saya menarik untuk Anda, saya dapat mempostingnya sebagai jawaban nanti.
Siarhey Uchukhlebau
Untuk pengamat acara, silakan periksa pertanyaan ini magento.stackexchange.com/questions/148638/…
Kapil Karangeeya
@SiarheyUchukhlebau Berarti Anda ingin menghapus item dari drop-down aksi massal.?
Kapil Karangeeya
Ya, saya mencoba membuatnya, tetapi tidak berhasil :(
Siarhey Uchukhlebau

Jawaban:

1

Untuk menambahkan tindakan massa kustom ke ui grid berdasarkan beberapa kondisi Anda dapat menggunakan kelas kustom untuk komponen ui 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>

Dan mengimplementasikan kelas ini memperluas komponen inti dari modul 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
    }
}

Atau Anda dapat menerapkan pendekatan sebaliknya :). Tentukan konfigurasi untuk massaction Anda di product_listing.xmldan hapus tindakan Anda dari konfigurasi di kelas massaction khusus jika dinonaktifkan di konfigurasi Anda.

Cara lain untuk menyesuaikan tindakan massal adalah menambahkan plugin untuk Magento\Ui\Component\MassAction::prepare.

Sergii Ivashchenko
sumber
0

Anda bisa menambahkan aksi massal ke admin admin Magento 2 menggunakan XML berikut dalam file XML grid:

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

Anda kemudian perlu membuat kelas controller dan tindakan Anda sendiri jika perlu. Bagaimana cara menambahkan aksi massa ke admin admin Magento 2? menjelaskan secara rinci cara menambahkan aksi massal ke kisi admin Magento 2 Anda.

Hungersoft
sumber