Apakah ada penjelasan dan / atau contoh konfigurasi minimum yang diperlukan untuk membuat Grid Komponen UI di Magento 2?
Saya tahu ada banyak sekali komponen inti, seperti
./vendor/magento/module-catalog/view/adminhtml/ui_component/product_listing.xml
Namun, file XML ini bersifat ekspansif, dan ada sedikit penjelasan tentang apa yang dilakukan setiap node, dan bagaimana Anda akan menggunakan ini untuk membangun kisi dari awal.
Ada juga modul sampel ini , tetapi itu
- Tampaknya kedepan formulir
- Tidak memiliki konteks / penjelasan tentang apa yang dilakukan setiap node
Saya mencari informasi "memulai" yang memungkinkan saya membuat kisi untuk koleksi model CRUD saya sendiri.
magento2
php
layout
uicomponent
Alan Storm
sumber
sumber
Jawaban:
[EDIT 3 Okt 2018]
Perbarui untuk tautan ke devdocs: 2.0 - https://devdocs.magento.com/guides/v2.0/ui-components/ui-listing-grid.html dan https://devdocs.magento.com/guides/v2. 0 / ui-components / ui-secondary.html
2.1 - https://devdocs.magento.com/guides/v2.1/ui_comp_guide/components/ui-listing-grid.html
2.2 - https://devdocs.magento.com/guides/v2.2/ui_comp_guide/components/ui-listing-grid.html
[EDIT 21 Jan 2016]
Pada 20/01/2016 magento2 devdocs telah diperbarui dengan dokumentasi tambahan komponen UI. Saya belum memeriksanya secara ekstensif tetapi mereka mungkin berisi lebih banyak informasi daripada respons yang saya berikan beberapa hari yang lalu, jadi untuk kepentingan waktu Anda, Anda mungkin ingin melihat http://devdocs.magento.com/guides/v2.0/ui -library / ui-library-secondary.html
[/SUNTING]
Saya telah bekerja dengan Magento2 selama lebih dari sebulan sekarang dan inilah yang saya perhatikan tentang cara baru membuat kisi-kisi.
Komponen grid Magento 2 UI
1) file tata letak di dalam
Company/Module/view/adminhtml/layout/module_controller_action.xml
define grid sebagai uiComponent dengan:2) uiComponent didefinisikan dalam
Company/Module/view/adminhtml/ui_component/listing_name.xml
file. Nama file harus sama dengan nama uiComponent yang digunakan dalam file tata letak. Struktur file mungkin tampak cukup kompleks pada pandangan pertama tetapi seperti biasa ini adalah beberapa node yang berulang. Untuk membuatnya sederhana, mari kita iris. Simpul utama dari file komponen adalah<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
. Itu diperbaiki dan saya percaya itu memerlukan atribut lokasi namespace. Berikutnya ada biasanya 4 node di dalam<listing />
simpul:<argument />
,<dataSource />
,<container />
dan<columns />
. Namun ini bukan pengaturan yang ketat karena<argument />
simpul mungkin diduplikasi untuk menyediakan lebih banyak konfigurasi atau<container />
seperti dalam daftar halaman cms yang menambahkan wadah "lengket" karena beberapa alasan.Node pertama adalah
<argument />
. Node ini mendefinisikan data untuk komponen. Biasanya Anda perlu memberikan sesuatu seperti ini:<argument />
simpul membutuhkan atributname
. Dalam hal inidata
mendefinisikan informasi dasar tentang komponen. Ini berisi beberapa<item />
simpul untuk setiap bagian spesifik dari konfigurasi.js_config
memberitahu komponen di mana penyedia data dan dependensi dalam konfigurasi xml daftar (yang saya pikir dikonversi ke hash javascript).provider
nilai terdiri dari daftar nama yang digunakan dalam file tata letak dan nama sumber data unik yang akan digunakan nanti. Dalam daftar itu saya memeriksa magentoprovider
dandeps
sama. Saya tidak yakin apa gunanya memiliki perbedaan ini.spinner
mengambil nama node tempat kolom grid didefinisikan.buttons
memungkinkan untuk menambahkan tombol ke bagian atas kotak. Dalam kebanyakan kasus itu hanyaAdd new
tombol. Tombol memiliki beberapa elemen:name
digunakan sebagai id elemen,label
adalah apa yang dikatakan tombol,class
adalah kelas tombol danurl
merupakan tautan yang ditunjuknya. Asteriks digantikan oleh bagian dari url saat ini. Mungkin lain<item />
node tombol adalah:id
,title
,type
(reset, mengirimkan atau tombol),onclick
(bukanurl
, itu mendahului),style
,value
,disabled
. Elemen tombol diberikan olehMagento\Ui\Component\Control\Button
kelas.Selanjutnya kita memiliki
<dataSource />
simpul:name
digunakan dalam<dataSource />
simpul harus cocok dengan yang digunakan dalamargument/js_config/provider
danargument/js_config/deps
. Node berikutnya mendefinisikan kelas mana yang bertanggung jawab untuk menyiapkan data untuk grid.class
argumen membutuhkan nama unik yang akan dicocokkandi.xml
.primaryFieldName
berkaitan dengan kolom primer basis data danrequestFieldName
variabel dalam permintaan http. Mereka mungkin sama tetapi tidak harus, daftar halaman menggunakan CMSpage_id
sebagaiprimaryFieldName
danid
sebagairequestFieldName
.update_url
mengacu pada titik masuk di mana ajax panggilan untuk pemfilteran dan penyortiran dikirim. Argumen kedua<dataSource />
mengacu pada file javascript yang menangani js bagian dari mengirim dan memproses panggilan ajax untuk grid. File default adalahMagento/Ui/view/base/web/js/grid/provider.js
.Node lain adalah
<container />
.Karena mengandung banyak data, izinkan saya membaginya juga. Anak-anaknya adalah bagian dari seluruh halaman. Anak pertama
<argument />
:Ini mendefinisikan knockout template yang bertanggung jawab untuk menangani tata letak dan semua tindakan dan dengan poin default
Magento/Ui/view/base/web/templates/grid/toolbar.html
Node berikutnya adalah (atau bisa juga)
<bookmark />
Node ini menambahkan fitur bookmark ke grid. Ini memungkinkan admin untuk mengatur "profil" yang berbeda dari kisi yang menampilkan kolom yang berbeda. Berkat itu, Anda dapat menambahkan semua kolom dari tabel ke kisi dan membiarkan pengguna memutuskan informasi mana yang relevan dengannya.
namespace
harus sama dengan nama yang digunakan dalam file tata letak.Node lain adalah
<component />
Kami memiliki 3 nilai untuk dikonfigurasi di sini. Pertama adalah
provider
yang mengikuti pola [listing_name_from_layout]. [Listing_name_from_layout]. [Listing_columns_node_name] (seperti pada listing node / argumen / spinner).component
merujuk ke file js yang menampilkan kisi dan dengan titik defaultMagento/Ui/view/base/web/js/grid/controls/columns.js
yang menggunakan templateMagento/Ui/view/base/web/templates/grid/controls/columns.html
. Item terakhir adalahdisplayArea
yang menentukan di mana kontrol kolom perlu ditampilkan. Itu merujukgetRegion('dataGridActions')
pada file yang didefinisikan dalamcontainer/argument/config/template
(default:)Magento/Ui/view/base/web/templates/grid/toolbar.html
.Node berikutnya adalah
<filterSearch />
Node ini menambahkan pencarian teks lengkap ke halaman. Itu terletak di atas grid sebagai bidang input teks tunggal dengan "Cari berdasarkan kata kunci" sebagai placeholder. Saya tidak yakin opsi apa yang mungkin ada di sini karena saya tidak bermain sebanyak ini tetapi listing_filters_chips merujuk ke
Magento/Ui/view/base/web/js/grid/filters/chips.js
file.Node berikutnya adalah
<filters />
Node ini mendefinisikan konfigurasi untuk pemfilteran kolom yang terlihat setelah mengklik tombol "Filter" di kanan atas grid.
columnsProvider
mengikuti struktur yang sama seperti node sebelumnya, jadi [listing_name_from_layout]. [listing_name_from_layout]. [listing_columns_node_name].storegeConfig
seperti [listing_name_from_layout]. [listing_name_from_layout]. [container_node_name] [bookmark_node_name]. Dalamtemplates
simpul item, Anda dapat menentukan file mana yang digunakan untuk memberikan opsi filter tertentu. Dalam hal ini hanya pilih yang didefinisikan dan menggunakanMagento/Ui/view/base/web/js/form/element/ui-select.js
sebagaicomponent
danMagento/Ui/view/base/web/templates/grid/filters/elements/ui-select.html
sebagai templat knockout. Lihatlah ke dalamMagento/Ui/view/base/web/js/form/element
untuk melihat kemungkinan lain. Hanya pilih yang ditentukan di sini untuk mengganti nilai default:Magento/Ui/view/base/web/js/form/element/select.js
danMagento/Ui/view/base/web/templates/grid/filters/elements/select.html
. Nilai default untuk filter dan node lain didefinisikan dalamMagento/Ui/view/base/ui_component/etc/definition.xml
.Node berikutnya adalah
<massAction />
dan memungkinkan untuk menambahkan aksi massa pilih ke gridname
argumen harus unik. Node anak pertama<argument />
mendefinisikan data dasar.provider
mengikuti struktur yang sama dengan node lain dan merujuk ke nama simpul kolom dan kolom id-nya. Kolom ini akan berisi kotak centang dengan item yang dipilih untuk diproses secara massal.component
mendefinisikan file apa yang digunakan untuk membuat dan menangani aksi massal. Nilai default adalahMagento_Ui/js/grid/massactions
(menunjuk keMagento/Ui/view/base/web/js/grid/massactions.js
). Anda dapat menggunakanMagento_Ui/js/grid/tree-massactions
untuk menambahkan struktur seperti pohon. Dalam kasus di atas saya menggunakannya untuk menambahkan tindakan "Ubah status" yang menunjukkan opsi "aktifkan" dan "nonaktifkan". Setelah<argument />
simpul, Anda dapat menambahkan sebanyak mungkin<action />
simpul yang ingin Anda miliki. Setiap<action />
node mengikuti skema serupa. Dalam kasus pertama (hapus tindakan) simpul membutuhkan nama yang unik. Kemudianargument
berisi konfigurasi di manalabel
adalah apa yang terlihat dalam opsi pilih,url
titik akhir untuk mengirim data danconfirm
menambahkan modal konfirmasi sebelum mengirim. Dalam hal aksi "Ubah status"url
diargument
simpul pertama dinonaktifkan karena url disediakan per status oleh kelas yang ditentukan dalamargument
simpul kedua . Kelas harus mengimplementasikan antarmuka Zend \ Stdlib \ JsonSerializable. PeriksaMagento\Customer\Ui\Component\MassAction\Group\Options
sebagai referensi.Akhirnya di
<container />
simpul kita memiliki<paging />
simpul yang mendefinisikan pagination.Struktur untuk
provider
danselectProvider
harus jelas sekarang.Dan simpul terakhir untuk grid dasar adalah
<columns />
. Ini berisi semua definisi kolom yang tersedia untuk digunakan oleh admin. Node didefinisikan sebagaidan atribut nama digunakan di node lain ketika merujuknya. Anak pertama adalah
Apa yang saya lakukan di sini hanya memberikan
provider
nilai yang benar mengikuti skema yang digunakan dalam daftar.fieldAction
simpul memungkinkan untuk menentukan tindakan yang dipecat ketika diklik pada sel. Pengaturan default panggilan edit tindakanBerikutnya adalah
<selectionColumns />
Node ini mendefinisikan kolom dengan kotak centang untuk tindakan massa yang akan digunakan. Nama-nama ini disebut setelah titik di beberapa node yang dijelaskan di atas.
Setelah itu Anda dapat menambahkan sejumlah kolom dalam format yang sama:
Tidak semua simpul item dalam diperlukan. Mereka mendefinisikan:
filter
- jenis filter kolom. Ini digunakan dalam blok filter. Nilai yang tersedia adalah: teks, pilih, dateRange. Jika pilih digunakan<item name="options">...</item>
akan digunakan sebagai kelas yang menyediakan opsi untuk filter pilihcomponent
- Menentukan file js yang digunakan untuk membuat kolom. Opsi yang tersedia ada diMagento/Ui/view/base/web/js/grid/columns/*
. pilih disediakan jika filter disetel untuk memilih. Untuk filter teks, nilai ini tidak diperlukan.dataType
- memberikan informasi tipe data yang digunakan untuk nilai kolom. Untuk pilih gunakan pilih juga, untuk dateRange tanggal digunakanbodyTmpl
- mendefinisikan file html yang digunakan oleh sistem gugur untuk membuat sel. Secara default ui / grid / sel / teks digunakan (Magento/Ui/view/base/web/templates/grid/cells/text.html
). Opsi lain ada diMagento/Ui/view/base/web/templates/grid/cells/*
direktori.ui/grid/cells/html
memungkinkan untuk menggunakan konten html dalam sel.label
- ini akan ditampilkan di header kolom dan blok filtersortOrder
- Memerintahvisible
- Menampilkan kolom atau tidak. Ini dapat digunakan untuk menentukan kolom untuk bookmark tetapi tidak menunjukkannya secara default.Pada akhirnya Anda bisa menambahkan aksi kolom aksi yang tersedia untuk satu item
indexField
mengacu pada nama kolom dalam database. Kelas aksi harus meluasMagento\Ui\Component\Listing\Columns\Column
dan mendefinisikanprepareDataSource
metode. LihatMagento/Cms/Ui/Component/Listing/Column/PageActions.php
sebagai referensi3) untuk menyelesaikan grid, kita perlu mendefinisikan beberapa elemen di Company / Module / etc / di.xml
Pertama kita mendefinisikan kelas provider yang digunakan dalam node
dataSource/class
collection
memutuskan ke kelas koleksi standar danfilerPool
mendefinisikan elemen baru:Ini jelas ada hubungannya dengan penyaringan dan pencarian. Untuk saat ini saya selalu menggunakan nilai default.
Sekarang kami mendaftarkan sumber data kami:
Dalam hal ini nama simpul harus cocok dengan yang digunakan dalam
<dataSource />
simpul dalam daftar xml dan memutuskan untuk tidak mengumpulkan tetapi ke kelas GridCollection. Itu harus memperluas kelas koleksi reguler dan juga menerapkanMagento\Framework\Api\Search\SearchResultInterface
.Pada akhirnya kami mengkonfigurasi koleksi grid kami (nama argumen agak jelas)
sumber
Untuk kisi kita membutuhkan dua file utama, satu adalah ui_component xml dan yang kedua adalah di.xml
Saya harap Anda tahu di file layout xml Anda perlu menambahkan tag uiComponent, yaitu -
sekarang Anda perlu membuat
test_lists_listing.xml
folder di ui_component.Misalnya app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
File ini memiliki jumlah tag
<argument name="data" xsi:type="array">
: - perlu menyebutkan arugemnt seperti tombol js dll.<dataSource name="test_lists_listing_data_source">
: - blok ini digunakan untuk memasok data untuk kisi-kisi dalam argumen ini<argument name="class" xsi:type="string">ListsGridDataProvider</argument>
yang perlu kami sebutkandi.xml
(dijelaskan di bagian di.xml )<container name="listing_top">
: - dalam blok ini kami menyebutkan filter, ekspor, bookmark (yang menyimpan data dalam tabel ui_bookmark), massaction, paging, dan fulltext (untuk melakukan pencarian teks lengkap dalam pengaturan atau tabel kolom yang harus indeks fulltext)<columns name="test_lists_columns">
: - dalam hal ini kita perlu menyebutkan semua kolomTerakhir ada di di.xml
app \ code \ Sugarcode \ Test \ view \ adminhtml \ ui_component \ test_lists_listing.xml
sumber
Tambahan Jawaban Atas
Jawaban teratasnya bagus, saya ikuti untuk membuat halaman daftar. Tapi ada masalah :
Larutan
Di
<dataSource />
simpul, di bawah<item name="update_url" xsi:type="url" path="mui/index/render"/>
, tambahkan konten:entity_id
adalah kunci utama untuk koleksi daftar.sumber
Saya menemukan jawaban Zefiryn sangat membantu dan cara yang bagus untuk memulai tanpa membaca dokumentasi lengkap dari Magento.
Yang mengatakan saya tidak mendapatkan banyak hal mengikuti jawaban ini. Terlebih lagi, begitu halaman daftar Anda berfungsi, Anda akan segera menginginkan antarmuka CRUD lainnya.
Saya menemukan modul sampel di github . Dimulai dengan utas ini untuk orientasi, kemudian porting / peretasan kode dari plugin sampel ternyata menjadi cara tercepat untuk mendapatkan antarmuka CRUD terhadap tabel kustom.
sumber