Saya mencari pendekatan yang baik dengan add / update yang sudah disiapkan (secara default) formulir Magento Pengguna (modul-pengguna). Formulir dapat dihubungi di panel admin dengan jalur ini:
Sistem> Semua pengguna> [terpilih_ pengguna]> Tab edit utama pengguna (Informasi Akun)
Sekarang saya mencoba menggunakan di.xml dalam modul khusus saya tempat saya menentukan dependensi: `
<preference for="Magento\User\Block\User\Edit\Tab\Main" type="Vendor_Name\Module_Name\Block\User\Edit\Tab\Main" />
<preference for="Magento\User\Block\Role\Grid\User" type="Vendor_Name\Module_Name\Block\Role\Grid\User" />
`
Ini adalah konten yang telah saya buat untuk kelas Main.php
// @codingStandardsIgnoreFile namespace Vendor_Name \ Module_Name \ Block \ User \ Edit \ Tab; gunakan \ Magento \ Pengguna \ Blok \ Pengguna \ Edit \ Tab \ Main sebagai UserEditMainTab; gunakan \ Magento \ Backend \ Block \ Template \ Context; gunakan \ Magento \ Framework \ Registry; gunakan \ Magento \ Framework \ Data \ FormFactory; gunakan \ Magento \ Backend \ Model \ Auth \ Session; gunakan \ Magento \ Framework \ Locale \ ListsInterface; kelas Utama meluas UserEditMainTab { fungsi publik __construct ( Konteks $ konteks, Registri $ pendaftaran, FormFactory $ formFactory, Sesi $ authSession, DaftarInterface $ lokalDaftar, array $ data = [] ) { parent :: __ construct ($ context, $ registry, $ formFactory, $ authSession, $ localeLists, $ data); } fungsi yang dilindungi _prepareForm () { / ** @var $ model \ Magento \ Pengguna \ Model \ Pengguna * / $ model = $ this -> _ coreRegistry-> registry ('permissions_user'); / ** @var \ Magento \ Framework \ Data \ Form $ form * / $ form = $ this -> _ formFactory-> create (); $ form-> setHtmlIdPrefix ('user_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Informasi Akun __ TEST')]); if ($ model-> getUserId ()) { $ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']); } lain { if (! $ model-> hasData ('is_active')) { $ model-> setIsActive (1); } } $ baseFieldset-> addField ( 'user_image', 'gambar', [ 'name' => 'user_image', 'label' => __ ('Gambar Pengguna'), 'id' => 'user_image', 'title' => __ ('Gambar Pengguna'), 'wajib' => salah, 'note' => 'Izinkan jenis gambar: jpg, jpeg, png' ] ); $ baseFieldset-> addField ( 'nama pengguna', 'teks', [ 'name' => 'username', 'label' => __ ('Nama Pengguna'), 'id' => 'nama pengguna', 'title' => __ ('Nama Pengguna'), 'wajib' => benar ] ); $ baseFieldset-> addField ( 'nama depan', 'teks', [ 'name' => 'firstname', 'label' => __ ('Nama Depan'), 'id' => 'firstname', 'title' => __ ('Nama Depan'), 'wajib' => benar ] ); $ baseFieldset-> addField ( 'nama keluarga', 'teks', [ 'name' => 'lastname', 'label' => __ ('Nama Belakang'), 'id' => 'nama belakang', 'title' => __ ('Nama Belakang'), 'wajib' => benar ] ); $ baseFieldset-> addField ( 'surel', 'teks', [ 'name' => 'email', 'label' => __ ('Email'), 'id' => 'customer_email', 'title' => __ ('Email Pengguna'), 'class' => 'wajib-entri validasi-email', 'wajib' => benar ] ); $ isNewObject = $ model-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ ('Kata Sandi'); } lain { $ passwordLabel = __ ('Kata Sandi Baru'); } $ confirmLabel = __ ('Konfirmasi Kata Sandi'); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ confirmLabel, $ isNewObject); $ baseFieldset-> addField ( 'interface_locale', 'Pilih', [ 'name' => 'interface_locale', 'label' => __ ('Antarmuka Antarmuka'), 'title' => __ ('Interface Interface'), 'values' => $ this -> _ LocaleLists-> getTranslatedOptionLocales (), 'class' => 'select' ] ); if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) { $ baseFieldset-> addField ( 'aktif', 'Pilih', [ 'name' => 'is_active', 'label' => __ ('Akun ini adalah'), 'id' => 'is_active', 'title' => __ ('Status Akun'), 'class' => 'input-select', 'options' => ['1' => __ ('Aktif'), '0' => __ ('Tidak Aktif')] ] ); } $ baseFieldset-> addField ('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']); $ currentUserVerificationFieldset = $ form-> addFieldset ( 'current_user_verification_fieldset', ['legend' => __ ('Verifikasi Identitas Pengguna Saat Ini')] ); $ currentUserVerificationFieldset-> addField ( self :: CURRENT_USER_PASSWORD_FIELD, 'kata sandi', [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, 'label' => __ ('Kata Sandi Anda'), 'id' => self :: CURRENT_USER_PASSWORD_FIELD, 'title' => __ ('Kata Sandi Anda'), 'class' => 'input-teks validate-current-password required-entry', 'wajib' => benar ] ); $ data = $ model-> getData (); tidak disetel ($ data ['kata sandi']); tidak disetel ($ data [mandiri :: CURRENT_USER_PASSWORD_FIELD]); $ form-> setValues ($ data); $ this-> setForm ($ form); return parent :: _ prepForm (); } }
dan beberapa kode untuk User.php
namespace Vendor_Name \ Module_Name \ Block \ Role \ Grid; gunakan \ Magento \ User \ Block \ Role \ Grid \ User sebagai RoleGridUser; gunakan \ Magento \ Backend \ Block \ Widget \ Grid \ Extended sebagai ExtendedGrid; kelas Pengguna memperluas RoleGridUser { fungsi terproteksi _prepareColumns () { parent :: _ prepacollection (); $ this-> addColumn ( 'user_image', [ 'header' => __ ('Gambar Pengguna'), 'width' => 5, 'sejajarkan' => 'kiri', 'sortable' => true, 'index' => 'user_image' ] ); return ExtendedGrid :: _ persiapanCollection (); } }
Jika Anda melihat lebih dekat, Anda sekarang sudah mencoba menambahkan bidang dengan gambar pengguna.
Sayangnya, saya tidak melihat perubahan apa pun di depan admin. Tentu saja, kolom yang diperlukan ditambahkan oleh skrip InstallSchema sebelumnya ke tabel ' admin_user '.
Isi direktori dalam format seperti pohon:
Module_Name ├── Blokir │ ├── Katalog │ │ └── Produk │ │ └── RelatedPosts.php │ ├── Peran │ │ └── Kotak │ │ └── User.php │ └── Pengguna │ └── Edit │ └── Tab │ └── Main.php ├── composer.json ├── dll │ ├── di.xml │ └── module.xml ├── Pengaturan └── InstallSchema.php
Apa kesalahan yang telah aku perbuat?
Jawaban:
Untuk menambahkan bidang gambar, Anda dapat mencoba menggunakan plugin dan selalu berusaha untuk tidak menimpa seluruh kelas.
Vendor / Module / etc / adminhtml / di.xml
Vendor / Modul / Plugin / Blok / Adminhtml / Pengguna / Edit / Tab / Main.php
Kosongkan cache.
sumber
/module-user/Controller/Adminhtml/User/Save.php
- simpan string dengan jalur gambar di tabel 'admin_user'. Maaf tentang banyak pertanyaan. hargai bantuan Anda! Bersulang!setelah beberapa penelitian mendapat solusi untuk ini
dengan nilai yang Anda butuhkan. lihat contohnya:
Saya harap ini akan membantu beberapa dari Anda ..
sumber
Mengganti pernyataan
dengan ini
bekerja untukku. Ini kode lengkapnya. Menambahkan bidang "Toko yang Dapat Diakses" sebagai berikut.
Dan terima kasih @Rob untuk berbagi petunjuk mulai dari mana.
sumber
Hanya untuk menambahkan contoh kerja lain, saya telah berhasil menimpa halaman admin Situs Web. Saya mencoba menambahkan bidang URL ke halaman edit situs web.
Saya melakukan persis apa yang dikatakan dalam jawaban yang divalidasi tetapi saya tidak menambahkan bidang baru. Alih-alih, saya telah menyelesaikan yang sudah ada, menggunakan id yang didefinisikan di kelas Situs web.
Selain itu, saya menggunakan warisan untuk mengambil model situs web dan mengambil nilai saat ini dari database untuk memasukkannya ke dalam formulir (Ini juga disalin dari kelas Situs Web Magento).
Dalam prasyarat, diperlukan untuk menambahkan kolom 'url' di tabel store_website dari database magento.
Ini hasil kerjanya (diuji di Magento 2.1):
Dan file di.xml di direktori Vendor / Store / etc / adminhtml (tidak ada yang baru di sini dari jawaban yang divalidasi):
sumber
Saya baru saja melakukan perubahan kecil pada solusi Anda dan itu berhasil untuk saya:
Jika Anda mau, saya dapat memposting seluruh solusi - tetapi saya harus merevisinya karena sesuai norma perusahaan saya, saya tidak dapat menampilkan kode di forum publik. Jadi beri tahu saya jika Anda bisa melakukannya sendiri.
sumber