2012-12-01 137 views
0

我有一个CCK字段,其中之一是一个主要的“请求类型”字段的形式。Drupal-6 CCK字段需要根据另一个字段值

根据主字段的状态,窗体上的其他字段是必需的。

实施例形式:


{主字段}

{字段中的一个}(必须总是通过CCK形式设置)

{FIELDGROUP我的垂直翼片组} {

- {field two}(要求IF主字段=='1')

- {field thr ee值}(所需IF主字段==“1”或“2”)

}


我一直在试图使用此形式的验证来完成,在这个阶段进出口试图使该字段在飞行中需要的,甚至没有检查masterfield,但我不能让它呈现为表单上的必填字段...

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.

当我在验证函数中的$ form上执行print_r转储时,它显示我成功更改了这些值,但未按需要进行渲染。

如何根据其他字段的值创建字段?

回答

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; 
    } 

工程请客

相关问题