Saya memiliki situasi yang sangat kompleks di mana saya memerlukan nasihat. Saya memiliki tipe konten my_content
, yang memiliki bidang koleksi bidang yang menyertainya field_mycollection
, yang memiliki bidang referensi entitas yang merujuk ke pengguna field_my_userreference
, bidang telepon field_my_phone
, bidang teks field_my_text
, dan bidang teks lainnya field_my_anothertext
.
My Content
|_ field_mycollection
|_ field_my_userreference
|_ field_my_phone
|_ field_my_text
|_ field_my_anothertext
Entitas pengguna juga memiliki bidang field_my_phone
, field_my_text
dan field_my_yetanothertext
yang terakhir memiliki nama mesin yang berbeda.
Apa yang ingin saya lakukan, jika dalam my_content
bentuk edit / tambah, dalam field_my_userreference
pengguna dipilih, bidang lain harus diisi secara otomatis dari data pengguna yang dipilih. Bidang yang diisi otomatis harus tetap dapat diedit.
Bagaimana saya bisa mencapai tujuan ini? Saya ingin melakukannya, jika mungkin, dengan beberapa pengkodean, menggunakan hook_form_FORM_ID_alter()
.
Jawaban:
Jika Anda ingin itu terjadi secara langsung, dan semua bidang sudah ada di formulir, cara teraman adalah
hook_form_FORM_ID_alter()
dengan menambahkan berikut ke formulir:Kemudian di
copy_field_value.js
buat perilaku:Anda juga dapat menggunakan
hook_form_FORM_ID_alter()
untuk menambahkan#ajax
parameter ke bidang sumber, tetapi itu akan membuat formulir Anda untuk memanggil server pada setiap salinan bidang. Jika Anda benar-benar perlu query database, itu adalah cara untuk pergi. Akan cukup luas untuk menggambarkannya lagi di sini. Anda perlu mengubah$form_state["input"]
array untuk memperbarui nilai nyata yang dilihat oleh pengguna. Lakukan dalam fungsi pembuatan formulir, bungkus denganisset
untuk menghindari pemberitahuan.Jika elemen bentuk Anda
$form["something"]["something"]["element"]
, nilainya akan di$form_state["input"]["something"]["something"]["element"]
- dan Anda bisa mengaturnya dengan baikhook_form_alter
, ingat untuk mengambil keduanya$form
dan$form_state
dengan referensi.Catatan :
.on()
metode ditambahkan di jQuery 1.7, sehingga Anda akan memerlukan Pembaruan jQuery untuk menggunakan jawaban ini secara langsung, atau menerjemahkan kode saya untuk menggunakan.change()
atau.blur()
metode.sumber
<input>
tag menggunakan Firebug atau alat serupa untuk browser favorit Anda. Atau gunakan pemilih jQuery lainnya. Ini akan terjadi di browser saja, sehingga Anda memiliki apa yang Anda miliki di layar. Di sisi lain jika Anda benar-benar perlu query database (sepertinya saya melewatkan itu),#ajax
adalah cara untuk pergi. Tapi itu akan sangat luas. Anda perlu mengubah$form_state["values"]
array untuk memperbarui nilai nyata yang dilihat oleh pengguna. Lakukan dalam fungsi pembuatan formulir, bungkus denganisset
untuk menghindari pemberitahuan.Anda dapat melakukannya menggunakan modul bidang yang dihitung
sumber
Saya ingin memposting bagaimana saya mencapainya berkat bantuan besar dari Mo Moot.
#ajax
properti untuk bidang tersebutfield_my_userreference
.Kode saya terlihat seperti:
sumber
Ini mungkin agak terlambat tetapi modul ini https://www.drupal.org/project/entityreference_autofill , tampaknya melakukan apa yang Anda gambarkan. Saya telah menggunakannya dan ini dapat membantu Anda juga.
sumber