我正在构建CTools面板的内容类型(即,添加内容时插入面板中的东西,而不是节点类型),并且我试图使用表单项的#ajax
属性来设置一些默认值。请参见下面的代码。
my_module_content_type_edit_form($form, &$form_state)
顺便说一下,这些都在内容类型的调用之内。
$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')),
);
我的回调如下。
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'];
}
无论我建议的退货是否确实有效,watchdog()
甚至都不起作用。
我知道CTools使用AJAX做一些奇怪的事情,但是那可不是那么奇怪。您对我想做的事情有任何想法吗?
谢谢!
或者:如何根据上一个表单选项的值设置默认值?
我想出了如何做到这一点,但这有点不客气-您为每个依赖项派生新的表单字段。然后,您可以将中的值合并在一起hook_content_type_edit_form_submit()
,使用与最初为所有分叉的组件选择的值相对应的任何一个。
我将问题悬而未决,因为我(坦率地说,与我合作的每个程序员)都确实希望有一种好的方法来在这些Panel内容类型编辑表单中使用AJAX。
更新:看来#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();
或drupal_add_js();
末尾成功添加Javascript hook_content_type_edit_form();
。如果您只是在做简单的与UI相关的事情,那似乎是最好的选择(至少在有人正确回答此问题之前)。