Saya memiliki empat bidang referensi entitas ke entitas pengguna dalam formulir. Bentuk host adalah bentuk edit simpul. Tiga di antaranya adalah daftar pilih, terakhir adalah Formulir Entitas Inline .
Setelah menambahkan entitas pengguna melalui IEF saya mencoba untuk memperbarui nilai daftar pilih:
function ebep_users_feature_users_list_ajax($form, $form_state) {
$ief = array_shift($form_state['inline_entity_form']);
$options = array('_node' => t('- None -'));
$commands = array();
foreach($ief['entities'] as $data) {
$options[$data['entity']->uid] = $data['entity']->name;
}
foreach(_ebep_users_feature_getUserListFieldNames() as $fieldName) {
$form[$fieldName]['und']['#options'] = $options;
$commands[] = ajax_command_replace('#'.$fieldName.'_wrapper', drupal_render($form[$fieldName]));
}
return array('#type' => 'ajax', '#commands' => $commands);
}
Ini berfungsi, tetapi ketika saya mencoba menambahkan pengguna lain melalui IEF saya mendapatkan:
Pilihan ilegal telah terdeteksi. Silakan hubungi administrator situs.
Related
pertanyaan di sini yang terdaftar di sebelah kanan untuk menyelesaikan ini?Jawaban:
--- Jawaban asli. Apakah salah, periksa pembaruan di bawah ini.
Baru diatur
Pada pilih yang akan diperbarui dengan AJAX.
Checkout "Pilihan Ilegal telah terdeteksi"
--- Perbarui 17 Des 2019 ---
Sebenarnya itu bukan nasihat yang baik, itu sudah lama sekali, sekarang saya lebih tahu.
Fungsi panggilan balik Ajax seharusnya hanya mengembalikan potongan formulir yang telah berubah atau beberapa perintah ajax.
Dalam hal ini modifikasi bentuk harus dilakukan pada fungsi formulir atau bentuk alter hook. Form building dan fungsi validasi dijalankan setiap kali panggilan balik ajax dipanggil. Cukup periksa $ form_state pada form build Anda atau ubah fungsi dan sesuaikan nilainya.
Lihat Mengatasi kesalahan "Pilihan ilegal telah terdeteksi ..."
sumber
Saya telah menghadapi masalah ini beberapa kali dalam Drupal 6, mengubah nilai daftar Pilih melalui Ajax.
Inilah yang dapat Anda lakukan
array_merge
Jika solusi pertama berfungsi untuk Anda, Anda akan menghemat banyak waktu untuk pengkodean dan pengujian berbagai hal. TETAPI jika daftar di drop down dinamis dan Anda tidak memiliki kendali atasnya, Anda mungkin harus menggunakan solusi kedua.
Lakukan posting jika Anda menghadapi masalah, saya telah melakukan cukup banyak pekerjaan pada masalah ini, untuk proyek saya, dan saya lakukan untuk ~ 50 formulir, PHEW !!! :)
sumber
Saya telah menemukan cara terbaik untuk mengatur ini
#value
pada daftar yang dipilih.Jika kita memiliki nilai di formstate dan itu ada di opsi kita maka kita tidak akan mendapatkan kesalahan. Jika nilai kami tidak ada dalam opsi maka pilih opsi pertama dalam opsi kami dan gunakan itu.
sumber
Solusi saya:
sumber
Dalam panggilan balik ajax Anda, tambahkan:
Sebagai tindakan pencegahan keamanan,
_form_validate()
fungsi inti memeriksa apakah kunci #pilihan elemen telah berubah dari apa yang ditetapkan dalam bangunan asli (yang mereka miliki). Dengan menelepondrupal_get_messages()
danform_get_errors()
pada dasarnya kami memberi tahu Drupal untuk mengabaikan kesalahan / pesan apa pun saat menjalankan permintaan ajax kami. :)sumber