我有一个包含一堆CCK字段的表单,其中一个是主“请求类型”字段。
表单上的其他字段是必需的,具体取决于主字段的状态。
示例表单:
{master field}
{field one}(必须始终,由cck表单设置)
{fieldgroup my group for vertical tabs} {
- {field two}(必需的IF主场=='1')
- {field three}(必需的IF主场=='1'或'2')
}
我一直在尝试使用表单验证来完成此操作,在此阶段我试图在不检查主域的情况下即时创建所需的字段但我不能将其渲染为表单上的必填字段... < / p>
function my_module_form_alter(&$form, $form_state, $form_id) {
switch ($form_id)
{
case 'my_node_node_form':
$form['#validate'][] = 'my_module_form_validate';
break;
default:
// nothing
break;
}
}
function my_module_form_validate($form, &$form_state) {
// there are so many versions of the same field, which one do I use?
$form['#field_info']['field_two']['required'] = '1';
$form['group_my_group']['field_two']['#required'] = '1';
$form['group_my_group']['field_two'][0]['#required'] = 'TRUE';
}
当我提交表单时,我得到的是Field One field is required.
当我在验证函数中的$表单上执行print_r转储时,它显示我已成功更改值,但未按要求呈现。
如何根据其他字段值创建所需字段?
答案 0 :(得分:0)
我发现关键不是使用$form['#validate'][]
而是$form['#after_build'][]
,就像这样
function my_module_form_alter(&$form, $form_state, $form_id) {
switch ($form_id)
{
case 'my_node_node_form':
$form['#after_build'][] = 'my_module_form_after_build';
break;
default:
// nothing
break;
}
}
function my_module_form_after_build($form, &$form_state) {
switch ($form['field_master_field']['#value']['value']) {
case '2':
$form['group_my_group']['field_three'][0]['value']['#required'] = TRUE;
case '1':
$form['group_my_group']['field_two'][0]['value']['#required'] = TRUE;
case '0':
$form['group_my_group']['field_one'][0]['value']['#required'] = TRUE;
break;
}
return $form;
}
运作一种享受