두 개의 제출 버튼을 표시하는 양식이 있습니다. 첫 번째 제출 버튼은 $ 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']가 페이지 새로 고침에서 지워지는지 여부를 알 수 없습니다.
아이디어가 있으십니까?
도움 주셔서 감사합니다.