老葛的Drupal培训班 Think in Drupal
我们使用可选的属性#collapsible和#collapsed来告诉Drupal,在点击第2个字段集标题时,通过使用Javascript让它可以伸缩。
这里有个问题值得思考:当$form_state['values']传递到验证和提交函数时,颜色字段应该是$form_state['values']['color']['favorite_color'] 还是$form_state['values']['favorite_color']?换句话说就是,是否将该值嵌套在字段集里面?答案是:根据情况而定。默认情况下,在表单处理器中,表单值不用嵌套,所以下面的代码是正确的:
function formexample_nameform_submit($form_id, $form_state) {
$name = $form_state['values']['user_name'];
$color_key = $form_state['values']['favorite_color'];
$color = $form_state['values']['color_options'][$color_key];
drupal_set_message(t('%name loves the color %color!',
array('%name' => $name, '%color' => $color)));
}
更新后的提交处理器所设置的消息可以在图10-4中看到。
图10-4 提交处理器为表单设置的消息
然而,如果将属性#tree设为TRUE,那么表单的数据结构就会反映到表单值的名字中。所以,如果我们在定义表单时声明了:
$form['#tree'] = TRUE;
那么我们就可以使用下面的方式访问数据了:
function formexample_nameform_submit($form, $form_state) {
$name = $form_state['values']['name']['user_name'];
$color_key = $form_state['values']['color']['favorite_color'];
$color = $form_state['values']['color_options'][$color_key];
drupal_set_message(t('%name loves the color %color!',
array('%name' => $name, '%color' => $color)));
}
提示 将属性#tree设为TRUE,你将得到一个嵌套的表单值数组。将属性#tree设为FALSE(默认情况),你将得到一个未嵌套的表单值数组。