Pertama, saya menyadari pertanyaan ini:
/programming/14799733/remove-name-field-from-joomla-registration-form
Tapi tautan dalam jawabannya sudah mati, dan jalur file yang disebutkan tidak ada di Joomla terbaru (versi 3.3), jadi jawabannya tidak ada gunanya sama sekali.
Yang saya inginkan sederhana: Formulir pendaftaran untuk Joomla terlihat seperti ini:
Saya ingin memastikan proses pendaftaran sesederhana mungkin bagi pengguna saya sehingga mereka benar-benar menyelesaikannya, dan ada beberapa masalah:
- Saya tidak perlu tahu nama asli pengguna.
- Saya lebih suka tidak memiliki kotak "konfirmasi". Konsensus umum adalah bahwa mereka tidak perlu. /ux/484/is-a-repeat-password-field-n Diperlukan-in-a--signup-page
- Semuanya diperlukan, mengapa repot menandai bidang yang harus diisi?
Tentunya ini adalah halaman pendaftaran yang jauh lebih baik:
Saya memodifikasi file \ components \ com_users \ models \ form \ registrasi.xml untuk membuat form seperti yang saya inginkan, dan itu berhasil! Tetapi setiap kali saya mengirimkan formulir, validasi masih mencari bidang yang hilang, jadi itu memberi tahu saya bahwa saya harus memberikan nama:
"Pendaftaran gagal: Silakan masukkan nama Anda."
Bagaimana saya bisa menonaktifkan pemeriksaan untuk bidang nama, serta dua bidang konfirmasi?
Karena nama diperlukan, saya ingin mengatur nama menjadi nama pengguna yang disediakan (jadi nama pengguna dan nama adalah sama secara default). Jika pengguna benar-benar ingin menetapkan nama asli di halaman profil mereka setelah pendaftaran, mereka seharusnya bisa, tetapi tidak harus diminta.
Apakah saya salah tentang hal ini? Saya telah membaca di beberapa tempat bahwa memodifikasi file inti Joomla tidak baik, karena dapat merusak pembaruan, dan bahwa "penggantian" harus digunakan sebagai gantinya. Biasanya tanggapan ini hanya menautkan ke halaman Joomla dengan mengabaikan, dan tidak memberikan penjelasan lebih jauh tentang bagaimana menggunakannya untuk melakukan apa yang diinginkan penanya. Saya sudah mencoba mencari tahu, tetapi tidak bisa, jadi jika mengganti adalah cara untuk pergi, tolong jelaskan bagaimana saya akan melakukan ini dengan mereka, daripada hanya menautkan ke tutorial override.
Saya sangat menghargai bantuan yang Anda berikan, saya sudah mencoba memikirkannya selama beberapa jam sekarang!
sumber
Jawaban:
Idealnya, ini semua akan dilakukan dalam plugin pengguna. Saya tidak yakin bahwa banyak orang menyadari hal ini, tetapi Anda dapat mengedit formulir dari sebuah plugin (tidak diperlukan peretasan inti).
Demikian juga, plugin akan melihat input sebelum model mencoba untuk menyimpan entri, sehingga Anda dapat mengejek beberapa bidang duplikasi bidang untuk memaksanya agar lulus validasi.
Fungsi dalam plugin "pengguna" ini memungkinkan Anda untuk mengubah formulir:
Kemudian Anda dapat menggunakan fungsi onUserBeforeSave untuk mengatur ulang bidang yang harus Anda atur ulang untuk lulus validasi. (Ini mungkin tidak sepenuhnya diperlukan, jadi cobalah tanpa dan lihat kesalahan apa yang Anda dapatkan.)
sumber
Ok jadi saya berpikir tentang pendekatan tanpa harus inti hack apa pun atau menginstal ekstensi pihak ke-3. Metode saya akan melibatkan Override Templat yang perlu Anda buat untuk komponen com_users , khususnya tampilan Registrasi .
Sekarang untuk isian (anggap override templat Anda sudah diseting), kami tidak akan menghapusnya, tetapi menyembunyikannya karena pengontrol dan modal memerlukan data darinya. Jadi buka file berikut yang sekarang menggantikan template Anda:
dan tambahkan kode berikut di dekat bagian atas file tepat setelah
JHtml::_('behavior.formvalidation');
:Saya telah menambahkan beberapa komentar sehingga Anda tahu apa yang dilakukan setiap cuplikan kode.
Semoga ini membantu :)
sumber
Jawaban @ DavidFritsch sangat membantu. Beberapa masalah yang saya temukan adalah:
A) Anda tidak dapat sepenuhnya menghapus bidang wajib tertentu karena menyebabkan masalah dengan pemfilteran data pada pengiriman formulir (lihat komentar dalam kode di bawah). Untuk mengatasi ini, sembunyikan daripada menghapus bidang dari objek formulir. B) Acara onUserBeforeSave tidak dipecat sampai terlambat untuk mencegah logika validasi pendaftaran menolak pengiriman formulir. Sebagai gantinya, gunakan acara onUserBeforeDataValidation.
Dalam kasus khusus saya, yang saya inginkan adalah alamat email dan kata sandi. Joomla terlibat dalam masalah di sini, karena alamat email muncul setelah kata sandi (ditentukan oleh urutan bidang yang dideklarasikan dalam file pendaftaran.xml), yang akan terlihat gila dari perspektif pengalaman pengguna. Untuk mengatasinya, saya memberi label ulang bidang nama pengguna ke 'Alamat Email' dan menyembunyikan bidang alamat email. Email kemudian default dari nama pengguna pada pengiriman formulir.
(Catatan kecil: Saya membatasi plugin hanya untuk beroperasi pada formulir 'com_users.registration' untuk tujuan saya, dibandingkan dengan jawaban David yang juga mempertimbangkan formulir lain.)
sumber