Saya memiliki komponen UI jaringan yang berada di dalam fieldset dari beberapa bentuk yang diedit. Saya perlu meneruskan entity_id
dari formulir edit ke kisi di mana saya dapat memfilter koleksi beberapa item berdasarkan nilai tertentu, dan kisi akan menampilkan hasil yang sesuai. Saya membuat komponen grid menggunakan komponen insertListing.
<insertListing name="slide_grid">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="autoRender" xsi:type="boolean">true</item>
<item name="source" xsi:type="string">slide</item>
<item name="loading" xsi:type="boolean">true</item>
<item name="dataScope" xsi:type="string">some_slider_slide_listing</item>
<item name="externalProvider" xsi:type="string">${ $.ns }.some_slider_slide_listing_data_source</item>
<item name="ns" xsi:type="string">some_slider_slide_listing</item>
<item name="externalData" xsi:type="string">id</item>
<item name="imports" xsi:type="array">
<item name="slider_id" xsi:type="string">${ $.provider }:data.entity_id</item>
</item>
<item name="exports" xsi:type="array">
<item name="slider_id" xsi:type="string">${ $.externalProvider }:params.slider_id</item>
</item>
</item>
</argument>
</insertListing>
Untuk mentransfer data ke penyedia data eksternal, saya menggunakan
<item name="exports" xsi:type="array">
<item name="slider_id" xsi:type="string">${ $.externalProvider }:params.slider_id</item>
</item>
Di dalam penyedia data eksternal saya mencoba mendapatkan data melalui permintaan.
$this->request->getParam('slider_id');
Tapi tidak ada apa-apa. Di frontend, saya menemukan bahwa Magento mengirim permintaan ajax dengan parameter saya tetapi saya tidak dapat menangkap ini di DataProvider saya dan memfilter koleksi.
magento2
uicomponent
data-provider
Misteri
sumber
sumber
Jawaban:
Untuk menambahkan cantuman sisipan oleh param komponen induk ui, kita dapat menggunakan kode di bawah ini.
Di sini
externalProvider
tag adalah untuk menambahkan penyedia sumber cantuman yang kami sisipkan.Di sini
imports
tag digunakan untuk impor param sumber data formulir saat iniDi sini
exports
tag digunakan untuk mengekspor params data formulir saat ini ke cantuman yang akan disisipkan.Tambahkan bergabung dengan kolom yang relevan ke koleksi saat ini untuk menggunakannya dengan dua cara:
Untuk detail lebih lanjut, periksa kode di bawah ini:
Di penyedia data tambahkan filter untuk param ini:
Saya suka mengikuti opsi 1.
sumber
Setelah membaca dan men-debug file inti Magento 2, saya telah menemukan solusi bersih dan sederhana tentang masalah ini. Mengirim data dari formulir kustom ke kisi kustom menggunakan insertListing UIComponen sangat sulit dan tidak didokumentasikan sama sekali.
Objek InsertListing memiliki dua parameter di bawah tag: ekspor dan impor yang telah saya gunakan dalam daftar saya:
dan setelah jam untuk memahami dan menemukan solusi di web, saya belum menemukan petunjuk apa pun!
Jadi saya telah membaca file Magento Core dan saya telah menemukan bahwa Magento menghubungkan cara untuk membuat grid daftar bersarang di proyek. Kadang-kadang menggunakan metode penyisipan blok lama dan beberapa kali metode daftar UIComponent baru.
Saya telah menemukan kisi daftar alamat pelanggan di customer_address_listing.xml (/vendor/magento/module-customer/view/adminhtml/ui_component/customer_address_listing.xml) dan mendapatkan variabel parent_id yang didefinisikan dalam customer_form.xml (/ vendor / magento) /module-customer/view/base/ui_component/customer_form.xml) tetapi pertanyaannya adalah:
Bagaimana Magento meneruskan data dari formulir ke kisi daftar bersarang?
Magento meneruskan data oleh PARAMETER QUERYSTRING!
Jika Anda membaca file DataProvider.php Anda akan terkejut karena mendapat variabel parent_id (pelanggan) oleh QUERYSTRING! Lihatlah /vendor/magento/module-customer/Ui/Component/Listing/Address/DataProvider.php baris 58:
tetapi bagaimana cara mengatur parameter di URL listinggrid? Saya telah menemukan parameter filterUrlParams tetapi ada masalah aneh juga di sini! Mari lihat kode sumber data yang terpotong ini:
Saya telah menetapkan ticket_id dengan wildcard (*) yang artinya: dapatkan semua tiket! tetapi jika Anda tidak menetapkan ID apa pun di filterUrlParams, URL insertListing TIDAK SETIAP ticket_id SET! Jadi kenapa?!
Solusi yang ditawarkan oleh @ hashish-raj tidak bekerja untuk saya.
Ini semua posting yang saya baca tentang masalah ini:
Pada akhirnya saya telah menemukan solusi sementara menggunakan sesi inti dan menyimpan parameter ticket_id dalam sesi tersebut. Kemudian di dataprovider khusus saya telah memeriksanya dan saya telah menerapkannya ke koleksi:
Jika Anda memiliki solusi atau Anda telah memahami bagaimana Magento menangani hubungan ini antara komponen UIC , silakan bagikan pengetahuan Anda!
Saya telah membuka "hadiah" di sini: https://magento.stackexchange.com/a/306537/2004
sumber