Saya sedang membangun Tipe Konten Panel CTools (yaitu, hal yang Anda masukkan ke panel ketika menambahkan konten, bukan tipe node) dan saya mencoba menggunakan #ajax
atribut item formulir untuk menetapkan beberapa nilai default. Lihat kode di bawah ini.
my_module_content_type_edit_form($form, &$form_state)
Ngomong-ngomong, ini semua di dalam panggilan jenis konten .
$form['link_type'] = array(
'#type' => 'radios',
'#title' => t('Link Type'),
'#ajax' => array(
'callback' => 'my_module_set_target'
),
'#default_value' => empty($conf['link_type']) ? '_blank' : $conf['link_type'],
'#options' => array('none'=>t('No Link'), 'internal'=>t('Internal Link'), 'external'=>t('External Link'), 'document'=>t('Document Link')),
);
Callback saya adalah sebagai berikut.
function my_module_set_target($form, $form_state) {
watchdog("Test", "Testing callback", array(), WATCHDOG_ALERT);
$form['link_target']['#default_value'] = '_parent';
return $form['link_target']['#default_value'];
}
Terlepas dari apakah pengembalian yang saya sarankan benar-benar berfungsi, watchdog()
bahkan tidak berhasil.
Saya tahu CTools melakukan beberapa hal aneh dengan AJAX, tetapi tidak mungkin itu aneh. Apakah Anda tahu bagaimana saya akan melakukan apa yang ingin saya lakukan?
Terima kasih!
Atau: Bagaimana cara menetapkan nilai default berdasarkan nilai opsi formulir sebelumnya?
Saya menemukan cara untuk melakukan ini, tapi ini sedikit gila - Anda membuat bidang formulir baru untuk setiap garpu ketergantungan. Anda kemudian bisa menggabungkan nilai-nilai bersama hook_content_type_edit_form_submit()
, menggunakan mana yang sesuai dengan nilai yang dipilih untuk komponen yang awalnya bercabang semuanya.
Saya membiarkan pertanyaan terbuka karena saya (dan, sejujurnya, setiap programmer yang bekerja dengan saya) benar-benar menginginkan cara yang baik untuk menggunakan AJAX di dalam formulir edit tipe konten Panel ini.
Pembaruan: Tampaknya Anda tidak dapat melakukan hal-hal dengan #attached.
$form['link'][$i] = array(
'#type' => 'fieldset',
'#title' => t('Link #@num', array('@num' => $i)),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#attached' => array(
'js' => array(
'alert("Yay.");', 'inline'
),
)
);
ctools_add_js();
atau drupal_add_js();
di akhir hook_content_type_edit_form();
. Jika Anda hanya melakukan hal-hal sederhana yang berhubungan dengan UI, sepertinya itu adalah panggilan terbaik (Setidaknya sampai seseorang menjawab pertanyaan ini dengan benar).