Saya mencoba menggunakan ajax untuk memperbarui dua bagian yang berbeda dari bentuk drupal dari hanya satu input blur.
Saya memiliki barang-barang ajax standar pada masukan saya:
$my_form['my_input']['#ajax'] = array(
'callback' => 'my_callback',
'wrapper' => 'my_target_div',
'event' => 'blur',
);
Ini berfungsi dengan baik, menukar div saya ketika input diperbarui ... namun saya juga ingin memperbarui input formulir lain di tempat lain dalam bentuk dengan kode yang berbeda sebagai akibat kabur pada input asli saya.
Apakah ini mungkin, ada ide?
Sunting: Untuk kejelasan, inilah contoh dunia nyata saya:
- Jenis konten 'film'
- Bidang yang ditambahkan 'primary_title'
- Ketika 'primary_title' diperbarui, panggilan balik ajax saya memeriksa string yang sama dan mengembalikan html.
Html dari panggil balik dimasukkan ke dalam div kosong.
Bagian itu bekerja dengan baik!
Saya mencoba juga memodifikasi input 'judul' simpul standar, memberikan nilai 'primary_title' setelah saya melakukan beberapa regex untuk merapikan string (menghapus "The" atau "A" dari awal dll) Hasilnya akan menjadi dua bidang judul, satu dengan judul lengkap 'primary_title' dan satu lagi 'judul' yang akan berguna untuk menyortir dan menampilkan catatan.
Jawaban:
Tampaknya Anda dapat menargetkan bagian-bagian berbeda dari suatu formulir menggunakan perintah ajax, namun Anda harus memilih untuk mengembalikan hanya satu saja dari salah satu:
HTML atau
Array yang dapat diulang atau
Array perintah AJAX
Dalam situasi yang awalnya saya tulis, saya mencoba mengembalikan array perintah AJAX dan array yang dapat di render, yang sepertinya tidak mungkin.
Kode dalam modul contoh menunjukkan penargetan bagian-bagian berbeda dari suatu formulir menggunakan larik perintah AJAX:
Dalam contoh kode ini, #html_div mendapatkan $ text, dan secara terpisah #html_status mendapatkan "Updated html_command_example dengan text = $ text;". tanggal ('r'). ""
Dua lokasi berbeda pada formulir dengan dua informasi berbeda dari panggilan balik ajax!
Melihat lagi apa yang sedang saya kerjakan, saya menyadari bahwa saya tidak perlu mengembalikan bidang judul simpul sama sekali. Ini hanya akan menjadi bidang utilitas, yang digunakan untuk menyortir data dalam daftar.
Saya telah menyembunyikan bidang pada formulir node dan dihuni kedua kali formulir saya dibangun ketika panggilan balik ajax asli saya dipicu.
sumber
Saya cukup baru untuk Drupal tetapi sejauh ini saya menemukan kerangka kerja Ajax agak tidak fleksibel. Ini berfungsi dengan baik selama Anda menggunakannya seperti yang dimaksudkan. Jadi, dalam contoh Anda jika Anda tahu beberapa JS yang terbaik adalah membuat skrip itu sendiri, itu harus sangat ringan.
Semoga berhasil!
sumber
Pilihan lain, dari drupal.org :
Fungsi panggilan balik Anda dapat sesederhana:
Itu harus dipanggil dari
#ajax
array pada elemen formulir (field_whatever
untuk contoh di bawah ini) didefinisikan dalamhook_form_FORM_ID_alter()
(atau semacam$form_state
pengubah bentuk) di mana Anda juga menguji dan membuat perubahan pada$form
array, seperti:sumber