php - Drupal multi-forma pierde estado en la actualización de la página
forms drupal-6 (1)
Si usa $ form_state [''rebuild''] = TRUE en la función _submit, el estado del formulario se guarda y se puede usar para los valores predeterminados.
Vea este ejemplo: http://www.ferolen.com/blog/how-to-create-multistep-form-in-drupal-6-tutorial/
Tengo un formulario de varias páginas. Visite la página 1, la página 2 y luego la página 3. Presione Actualizar (f5) y el formulario vuelva a la página 2.
Esto es con drupal-6. El problema es similar a este http://drupal.org/node/1060290 .
Profundizando en el problema, a través de la tabla de base de datos form_cache. Los datos de la página 1 y 2 aparecen allí. En el depurador de php, parece que se ha creado un nuevo form_id. es decir. storage_form-1add3819cbea88139679819935a69686 es la clave en la tabla de la memoria caché de la base de datos y form-bcf9556f57f5352a57dfbba4c2120ee7 es el ''form_id'' al actualizar.
¿Cómo se ve mi código de formulario?
Función de forma principal:
function myform_online(&$form_state) {
// $form_state[''storage''][''step''] keeps track of what page we''re on.
// start at step 1 if no storage has been set
if (!isset($form_state[''storage''][''step''])) {
$form_state[''storage''][''step''] = 1;
}
// If we are saving the form data we should submit rather than display the details.
// At least look at saving the step.
// Don''t lose our old data when returning to a page with data already typed in.
$default_values = array();
if (isset($form_state[''storage''][''values''][$form_state[''storage''][''step'']])) {
$default_values = $form_state[''storage''][''values''][$form_state[''storage''][''step'']];
}
switch ($form_state[''storage''][''step'']) {
case 1:
// Your Details
module_load_include(''inc'', ''join_online'', ''includes/step1'');
Y nos ocupamos de enviar:
function join_online_submit($form, &$form_state) {
//Save the values for the current step into the storage array.
//dsm($form_state);
$form_state[''storage''][''values''][$form_state[''storage''][''step'']] = $form_state[''values''];
# ahah - bail.
if ($form_state[''ahah_submission'']) {
return;
}
// How do we work out if this was a refresh? It currently does start with 1 and think that the step is #2.
//Check the button that was clicked and change the step.
if ($form_state[''clicked_button''][''#id''] == ''edit-previous'') {
$form_state[''storage''][''step'']--;
} elseif ($form_state[''clicked_button''][''#id''] == ''edit-next'') {
$form_state[''storage''][''step'']++;
} elseif ($form_state[''clicked_button''][''#id''] == ''edit-finish'') {
//You should store the values from the form in the database here.
//We must do this or the form will rebuild instead of refreshing.
unset($form_state[''storage'']);
//Go to this page after completing the form.
$form_state[''redirect''] = ''join_online/form/thank-you'';
}
}