2010-02-28 22 views
4

我有一個顯示兩個提交按鈕的窗體。第一個提交按鈕將$ form_state ['storage']設置爲一個值。第二個提交按鈕然後讀取這個$ form_state ['storage']的值。如果設置該值,則顯示成功消息。如果該值未設置,則顯示失敗消息。

這裏是將重現我的問題代碼:

function mymodule_test_admin() { 
    return drupal_get_form('mymodule_test_form'); 
} 

function mymodule_test_form(&$form_state) { 
    $form['mymodule_test_form1'] = array(
     '#type' => 'fieldset', 
     '#title' => t('test 1'), 
     '#collapsible' => TRUE, 
     '#collapsed' => FALSE, 
     '#tree' => TRUE 
    ); 

    $form['mymodule_test_form1']['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('button 1'), 
     '#submit' => array('mymodule_test_form1_submit') 
    ); 

    $form['mymodule_test_form2'] = array(
     '#type' => 'fieldset', 
     '#title' => t('test 2'), 
     '#collapsible' => TRUE, 
     '#collapsed' => FALSE, 
     '#tree' => TRUE 
    ); 

    $form['mymodule_test_form2']['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('button 2'), 
     '#submit' => array('mymodule_test_form2_submit') 
    ); 

    return $form; 
} 

function mymodule_test_form1_submit($form, &$form_state) { 
    $form_state['storage']['test_1'] = 'test 1'; 
    drupal_set_message(t('@message', array('@message' => $form_state['storage']['test_1']))); 
} 

function mymodule_test_form2_submit($form, &$form_state) { 
    if (isset($form_state['storage']['test_1'])) { 
     drupal_set_message(t('success')); 
    } else { 
      drupal_set_message(t('fail!')); 
     } 
} 

當您單擊第一個提交按鈕,$ form_state [「存儲」]設置正確。當您單擊第二個提交按鈕時,將顯示消息「成功」。到現在爲止還挺好。現在做一個頁面刷新。信息「失敗!」被展示。

所以,一切工作正常,直到頁面刷新。頁面刷新本質上只是調用第二個提交函數。理論上,$ form_state ['storage']仍然應該填充,顯示的消息應該是「成功」。但是,查看$ form_state轉儲後,頁面刷新後顯示$ form_state ['storage']爲NULL。我無法判斷我的代碼邏輯是否錯誤,或者是否在頁面刷新時清除了$ form_state ['storage']。

任何想法?

感謝您的幫助。

回答

1

寄存提交後會被清除,使用$ _SESSION [「mymodule_test_XXX」]在多級存儲形式...

8

您將需要在處理form1_submit年底重建形式,這將讓先前提交的值完整。這是一些什麼樣的多級形式的場景,但是從不同的方式,有點它在Drupal做5


function mymoduel_test_form1_submit($form, &$form_state) { 
    $form_state['storage']['test_1'] = 'test 1'; 
    drupal_set_message(t('@message', array('@message' => $form_state['storage']['test_1']))); 
    $form_state["rebuild"] = TRUE; 
} 

希望這有助於 Sarfaraz