Bagaimana cara menggunakan Ajax dalam bentuk perubahan di Drupal 7?

8

Saya telah membuat jenis konten bernama "menu utama". Saya memiliki beberapa daftar pilih yang saling bergantung. Saya ingin menampilkan daftar yang berbeda ketika kotak centang yang berbeda dipilih. Saya tahu bahwa saya perlu menggunakan Ajax untuk mengedit formulir untuk mencapainya, tetapi adakah yang bisa memberitahu saya cara menggunakan Ajax dengan hook_form_alter?

Id formulir dari formulir yang seharusnya saya edit adalah "main_menu_node_form". Ketika saya mencoba mengakses formulir ini menggunakan hook_form_alter(), dan menambahkan #ajaxproperti dari bidang formulir, tampaknya saya tidak dapat melakukannya karena bidang sudah dirender sebelum pegangan diteruskan ke hook_form_alter(). Adakah yang bisa membantu saya menyelesaikan ini?

Catatan: Saya telah membuat tipe konten menggunakan hook_install().

function main_menu_content_type_form_main_menu_node_form_alter(&$form, &$form_state, $form_id) {
  dpm($form);
  dpm($form_state);

  $form['field_mlnk'] = array(
    '#ajax' => array(
      'callback' => 'main_menu_content_type_form_main_menu_node_form_alter_callback',
      'wrapper' => 'link-div',
      'method' => 'replace',
      'effect' => 'fade',
    ),
  );
}
Pengembang Drupal
sumber
1
Akan sangat membantu untuk melihat kode dari bentuk yang Anda coba ubah, dan kode yang Anda gunakan untuk mengubahnya.
kiamlaluno
@kiamlaluno Saya telah membuat tipe konten main_menu menggunakan fungsi hook_install. Saya ingin menampilkan bidang sambil menambahkan konten sesuai dengan pilihan yang dibuat dalam daftar. Haruskah saya menambahkan properti ajax di hook_install atau di Hook_form_alter.
Pengembang Drupal
Namun, akan berguna untuk melihat kode yang Anda gunakan hook_form_alter()(ketika Anda menulis, "Ketika saya mencoba mengakses formulir ini menggunakan formulir ubah [... [...]").
kiamlaluno
@kiamlaluno Saya telah menambahkan cuplikan kode ke pertanyaan saya. Mohon lihat itu dan beri tahu saya apakah kode itu berfungsi atau tidak.
Pengembang Drupal
Akan sempurna jika Anda juga akan menunjukkan kode untuk main_menu_content_type_form_main_menu_node_form_alter_callback(); jika fungsi itu berisi kode yang salah, pengguna tidak dapat melaporkan perubahan apa pun yang harus Anda lakukan pada kode Anda untuk membuatnya berfungsi.
kiamlaluno

Jawaban:

7

Saya dapat memberi Anda beberapa informasi terperinci tentang apa yang Anda lakukan salah dengan hook_form_alter jika Anda menyertakan beberapa kode aktual dari modul khusus Anda. Namun, karena Anda tidak memberikan spesifik, Anda dapat menonton video: Cara membuat formulir yang indah di Drupal 7 (perhatikan bahwa saya memasukkan URL sehingga dimulai pada saat di mana ajax dijelaskan). Sekitar 5 menit menonton ini mungkin akan memberi Anda jawaban untuk pertanyaan Anda (karena ini menjelaskan persis bagaimana menggunakan ajax dengan hook_form_alter), tetapi jika Anda benar-benar tidak sabar, kode aktual ditampilkan di sekitar sini .

Jika Anda ingin melihat contoh langsung dari formulir yang diubah menggunakan ajax, ada satu di modul Contoh . Anda dapat menemukan hook yang sebenarnya di sini dan fungsi callback di sini .

Saya harap ini membantu. Jika tidak, beri kami lebih banyak latar belakang tentang kode Anda dan kami akan dapat memberi tahu Anda apa yang Anda lakukan salah.

F1234k
sumber
@ F123K Saya ingin mengubah bidang yang ada di formulir daripada menambahkan bidang baru ke formulir. Jadi tolong katakan padaku bagaimana itu bisa dilakukan.
Pengembang Drupal
Pos diedit dengan pengait sampel dan fungsi panggilan balik.
F1234k