2010-02-28 2 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']가 채워 져야하고 표시되는 메시지는 "success"여야합니다. 그러나 $ form_state 덤프를 보면 $ form_state [ 'storage']가 페이지 새로 고침 후 NULL입니다. 내 코드 논리가 잘못되었거나 $ form_state [ 'storage']가 페이지 새로 고침에서 지워지는지 여부를 알 수 없습니다.

아이디어가 있으십니까?

도움 주셔서 감사합니다.

답변

1
저장 후 사용하여 삭제합니다 제출

$ _SESSION 다단계 형태로 저장 [ 'mymodule_test_XXX'] ...

8

당신이 이전에 제출 된 값을 유지합니다 처리 form1_submit의 끝에서 양식을 다시 작성해야합니다 손대지 않은. 이 다단계 형태의 일부 어떤 시나리오이지만, 길에서 다른 비트는 드루팔이 도움이 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

을 시행 하였다