2010-02-28 2 views
4

J'ai un formulaire qui affiche deux boutons d'envoi. Le premier bouton submit définit $ form_state ['storage'] à une valeur. Le deuxième bouton de soumission lit ensuite cette valeur $ form_state ['storage']. Si la valeur est définie, un message de réussite s'affiche. Si la valeur n'est pas définie, un message d'échec s'affiche.

Voici le code qui reproduira mon problème:

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!')); 
     } 
} 

Lorsque vous cliquez sur le premier bouton d'envoi, form_state $ [ « stockage »] est correctement configurée. Lorsque vous cliquez sur le deuxième bouton d'envoi, le message "succès" s'affiche. Jusqu'ici tout va bien. Maintenant, effectuez une actualisation de la page. Le message "échouer!" est affiché.

Tout fonctionne jusqu'à la mise à jour de la page. L'actualisation de la page n'appelle essentiellement que la deuxième fonction de soumission. En théorie, $ form_state ['storage'] devrait toujours être rempli et le message affiché devrait être "succès". Cependant, en jetant un coup d'œil à l'image de vidage $ form_state $ form_state ['storage'] est NULL après l'actualisation de la page. Je ne peux pas dire si ma logique de code est incorrecte ou si $ form_state ['storage'] est effacé lors de l'actualisation de la page.

Des idées?

Merci pour votre aide.

Répondre

1

Stockage soumettre AFTER autorisé, utilisez $ _SESSION [ « mymodule_test_XXX »] pour le stockage dans des formes ... plusieurs étapes

8

Vous devrez reconstruire forme à la fin du traitement form1_submit, cela permet de garder les valeurs soumises précédemment intact. Ceci est un peu ce qu'est un scénario de formes multi-étapes, mais un peu différent de la façon dont il a été fait dans 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; 
} 

Hope this helps, Sarfaraz

Questions connexes