Bir CTools Paneller İçerik Türü oluşturuyorum (yani, bir düğüm değil içerik eklerken panellere eklediğiniz şey) ve #ajax
bazı varsayılan değerleri ayarlamak için bir form öğesinin özniteliğini kullanmaya çalışıyorum . Aşağıdaki koda bakınız.
Bu arada, içerik türünün my_module_content_type_edit_form($form, &$form_state)
çağrısının içinde .
$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')),
);
Geri aramam şu.
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'];
}
Önerdiğim getirinin gerçekten işe yarayıp yaramayacağı önemli watchdog()
değil.
CTools'un AJAX ile garip şeyler yaptığını biliyorum, ama o kadar garip olamaz. Yapmak istediğim şeyi nasıl yapacağım hakkında bir fikrin var mı?
Teşekkürler!
Alternatif olarak: Önceki form seçeneğinin değerine göre nasıl varsayılan bir değer ayarlayabilirim?
Bunu nasıl yapacağımı anladım, ama biraz acayip - her bağımlılık çatalı için yeni form alanları oluşturuyorsun. Daha sonra hook_content_type_edit_form_submit()
, başlangıçta her şeyi çatallayan bileşen için seçilen değere karşılık gelen değeri kullanarak değerleri bir araya getirebilirsiniz .
Soruyu açık bırakıyorum çünkü (ve açıkçası, birlikte çalıştığım her programcı) bu Panel içerik türü düzenleme formlarının içinde AJAX kullanmak için iyi bir yol istiyor.
Güncelleme: Görünüşe göre #attached ile bir şeyler yapamazsınız.
$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();
veya drupal_add_js();
sonunda Javascript ekleyebildiğimi belirtmek gerekir hook_content_type_edit_form();
. Yalnızca kullanıcı arayüzü ile ilgili basit şeyler yapıyorsanız, bu en iyi çağrı olabilir gibi görünüyor (En azından biri bu soruyu doğru bir şekilde yanıtlayana kadar).