Saya telah membuat formulir web menggunakan API Formulir. Saya menggunakan #AJAX
opsi bidang untuk menambahkan validasi AJAX ke setiap bidang.
Apakah mungkin untuk memvalidasi dan mengirimkan formulir menggunakan AJAX tanpa memuat ulang halaman. Jika validasi gagal, saya ingin menampilkan pesan kesalahan dan jika validasi berhasil maka saya ingin menampilkan pesan (idealnya di lightbox) dan mengatur ulang bidang formulir.
Kode saya sejauh ini:
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#default_value' => '',
'#maxlength' => '128',
'#required' => TRUE,
'#ajax' => array(
'callback' => '_validate_name',
'wrapper' => 'name-error-icon-container',
'method' => 'html',
'effect' => 'none',
'progress' => array(
'message' => NULL,
),
),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
'#ajax' => array(
'callback' => '_handle_form_submit',
'effect' => 'fade',
),
);
fungsi callback terlihat seperti ini:
function _validate_name($form, $form_state) {
if ($form_state['values']['name'] != '') {
$output = 'OK';
}
else {
$output = 'Enter a value';
}
return $output;
}
function _handle_form_submit($form, $form_state) {
}
Tapi saya tidak yakin apa yang harus _handle_form_submit
berfungsi untuk memvalidasi dan kemudian mengembalikan pesan atau mengirim formulir dan mengatur ulang bidang?
Saya tahu ini adalah pertanyaan yang sudah ada selama beberapa tahun sekarang, tetapi saya tidak merasa ada jawaban lain yang benar-benar mendapatkan poin dari pengajuan formulir Drupal 7 ajax, jadi saya akan mencoba menjelaskannya.
Karena formulir Anda harus bekerja dengan baik tanpa ajax sesuai praktik yang baik, penangan ajax Anda harus melakukan apa pun selain mengembalikan formulir. Segala sesuatu yang lain harus ada dalam validasi Anda dan mengirimkan fungsi.
sumber
Saya pikir posting oleh maxtorete pada 17 Oktober 2011 tampaknya memberikan contoh yang lebih lengkap menggunakan keduanya
form_validate()
danform_submit()
(Saya belum mengujinya.)
Juga jawaban Joshua Stewardson di stack overflow memiliki contoh kerja yang bagus:
Joshua menyatakan bahwa pesan kesalahan validasi menggantikan
#ajax['wrapper']
elemen sepenuhnya sehingga panggilan balik Anda perlu memasok kembali elemen ini saat Anda menggantinya.sumber
Secara umum, validasi dan penanganan pengiriman formulir harus terjadi dalam panggilan balik _validate () dan _submit () yang biasa. Idenya adalah bahwa formulir harus tetap berfungsi tanpa ajax.
Cukup banyak satu-satunya hal yang harus dilakukan callback #ajax adalah mengembalikan bagian dari formulir yang harus diganti, menurut pembungkus yang ditentukan.
sumber
#ajax
fungsi panggilan balik di Drupal 7 Anda hanya mengembalikan bagian dari formulir yang ingin Anda ganti.Ada dua cara
1)
2) Modul contoh http://cgit.drupalcode.org/examples/tree/ajax_example/ajax_example.module?id=refs/heads;id2=7.x-1.x#l402
sumber
Dalam kasus saya, menggunakan
submit
tipe menyebabkan formulir untuk selalu mengirimkan, jadi saya mengubahnya kebutton
dengan yang#ajax
ditentukan. Kemudian, saya harus melakukan validasi saya di ajax callback.Saya membuat panel ctools; Saya tidak tahu apakah itu berperan di dalamnya.
sumber