Saya ingin membuat tautan ke kisi khusus di admin saya dengan filter yang telah ditentukan. Kotak dibuat dengan Komponen Daftar UI (XML) dan memiliki kolom yang disebut form_id
setup seperti ini:
<column name="form_id">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="filter" xsi:type="string">textRange</item>
<item name="label" xsi:type="string" translate="true">Form id</item>
</item>
</argument>
</column>
Grid berfungsi dengan baik. Saya dapat menerapkan filter dan semuanya berfungsi dengan baik. Kotak diperbarui dengan baik dengan permintaan XHR.
Namun ... Saya ingin dapat memiliki nilai filter yang telah ditentukan sebelumnya di beberapa titik. Misalnya, saya ingin dapat membuka kisi ketika difilter pada ID = 3.
Jadi saya sudah mencoba memuat halaman dengan parameter URL yang sama dengan permintaan XHR, serta hanya menambahkan satu-satunya parameter yang diperlukan:
?namespace=form_response_listing&search=&filters[placeholder]=true&filters[form_id][from]=3&filters[form_id][to]=3&paging[pageSize]=20&paging[current]=1
Sebaik:
?filters[form_id][from]=3&filters[form_id][to]=3
Keduanya tidak berhasil. Jadi, bagaimana saya dapat mengisi ulang filter dengan menggunakan URL?
Edit:
Saya tidak yakin apakah ini merupakan duplikat dari pertanyaan lain (sebagaimana disebutkan dalam komentar di bawah). Dalam kasus saya, saya menggunakan tipe virtual sebagai koleksi untuk kisi saya:
<virtualType name="Vendor\Module\Model\ResourceModel\Response\Grid\Collection"
type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
<arguments>
<argument name="mainTable" xsi:type="string">vendormodule_form_response</argument>
<argument name="resourceModel" xsi:type="string">Vendor\Module\Model\ResourceModel\Response</argument>
</arguments>
</virtualType>
Jadi bukan karena saya memiliki kelas Blok fisik untuk widget kotak saya, ini murni dibuat dengan XML UI daftar Komponen.
Namun demikian, saya tetap akan memeriksa apakah pertanyaan yang dirujuk akan membantu kasus penggunaan saya.
prepareColumns
metode.Jawaban:
Inilah yang saya temukan sejauh ini.
Ini tidak lengkap tetapi bisa membawa Anda di jalan yang benar.
Saya melakukan tes dengan memodifikasi halaman yang mencantumkan komponen ui.
Saya menambahkan ini
di
cms_page_listing.xml
dalam node dataSource di dalam argumen data / config. Jadi sekarang terlihat seperti iniIni memungkinkan saya untuk memanggil url
ROOT/admin/cms/page/index/key/<form_key_here>/?page_id=2
.Dan saya hanya melihat halaman dengan id 2.
Tetapi tidak berfungsi untuk filter rentang dan nilai filter tidak diisi. Ini masih terlihat kosong.
Sekarang inilah mengapa ini mungkin.
Kelas dataProvider untuk halaman cms adalah
Magento\Cms\Ui\Component\DataProvider
.Yang ini meluas
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
.Yang terakhir ini berisi metode yang dilindungi yang disebut
prepareUpdateUrl
Apa yang dilakukan adalah memeriksa di konfigurasi komponen ui jika ada elemen yang dipanggil
filter_url_params
. Jika ada, dibutuhkan semua nilai di dalamnya dan memeriksa permintaan untuk nilai yang cocok dengan apa yang didefinisikanfilter_url_params
.Tetapi secara default hanya berfungsi dengan
eq
.Apa yang dapat Anda coba adalah memiliki sumber data khusus untuk komponen Anda di mana Anda menulis ulang metode
prepareUpdateUrl
dan membuatnya mempertimbangkan semua variabel permintaan yang Anda butuhkan dan mungkin menambahkan paging untuk itu dan rentang pemfilteran.Catatan: Ini adalah pertanyaan yang sangat menarik. Saya yakin banyak orang akan membutuhkan ini di masa depan.
sumber
ROOT/admin/cms/page/index/page_id/2/key/<form_key_here>
, karena saya menggunakan$this->urlBuilder->getUrl(static::URL_PATH,[ 'page_id' => $item['id']])
di UiCompnent / Listing / Column