2012-12-01 174 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; 
    } 

工程請客

相關問題