2 つの送信ボタンを表示するフォームがあります。最初の送信ボタンは $form_state['storage'] に値を設定します。2 番目の送信ボタンは、この $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['storage'] が適切に設定されます。2 番目の送信ボタンをクリックすると、「成功」というメッセージが表示されます。ここまでは順調ですね。ここで、ページを更新します。「失敗!」というメッセージ。表示されています。
そのため、ページが更新されるまですべてが正しく機能します。ページの更新は基本的に、2 番目の送信関数を呼び出すだけです。理論的には、$form_state['storage'] は引き続き入力され、表示されるメッセージは「成功」であるはずです。ただし、$form_state ダンプを見ると、ページの更新後に $form_state['storage'] が NULL であることがわかります。コード ロジックが間違っているのか、ページの更新時に $form_state['storage'] がクリアされているのかわかりません。
何か案は?
ご協力いただきありがとうございます。