Проблема с мультишаговой формой

Главные вкладки

Аватар пользователя seti seti 27 мая 2009 в 14:54

Всем привет,

Пытаюсь создать мультишаговую форму.
Грузится первый шаг, но потом после нажатия кнопки "Далее" он снова повторяется.

Код такой:

<?php
function my_module_my_form() {
 
$form = array();

  

$step = isset($form_state['storage']['step']) ? $form_state['storage']['step'] + 1;
  
$form['step'] = array('#type' => 'value''#value' => $step);

  switch (

$step) {
    case 
1:
    
$form['username'] = array(
          
'#type' => 'textfield',
          
'#title' => t('Username'),
          
'#description' => t('Enter the answer to the above question.'),
          
'#required' => TRUE,
          
'#weight' => 1,
        );
        
$form['operation'] = array(
          
'#type' => 'submit',
          
'#value' => t('Next'),
          
'#weight' => 2
        
);
    break;
    case 
2:
        
$form['firstname'] = array(
          
'#type' => 'textfield',
          
'#title' => t('Firstname'),
          
'#description' => t('Enter the answer to the above question.'),
          
'#required' => TRUE,
          
'#weight' => 1
        
);
        
$form['operation'] = array(
          
'#type' => 'submit',
          
'#value' => t('Submit'),
          
'#weight' => 2
        
);
      break;
  }

  return 

$form;
}
function 
my_module_my_form_submit($form, &$form_state) {
  
$form_state['rebuild'] = TRUE;
  
$form_state['storage']['step'] = $form_state['storage']['step'];
}
?>

Буду очень признателен если кто поможет.

Комментарии

Аватар пользователя gorr gorr 27 мая 2009 в 18:01

А можно еще по-другому попробовать, например в первой функции form_state по ссылке передать и там же присвоить ему значение для $form_state['storage']['step']:
function my_module_my_form(&$form_state) {...}

Аватар пользователя seti seti 27 мая 2009 в 19:18

Gorr,

Огромное Вам спасибо! Заработало!
Если кому надо будет в будущем, код выглядит следующим образом:

<?php
function my_module_my_form(&$form_state) {
 
$form = array();

  

$step = isset($form_state['storage']['step']) ? $form_state['storage']['step'] + 1;
  
$form['step'] = array('#type' => 'value''#value' => $step);

  switch (

$step) {
    case 
1:
    
$form['username'] = array(
          
'#type' => 'textfield',
          
'#title' => t('Username'),
          
'#description' => t('Enter the answer to the above question.'),
          
'#required' => TRUE,
          
'#weight' => 1,
        );
        
$form['operation'] = array(
          
'#type' => 'submit',
          
'#value' => t('Next'),
          
'#weight' => 2
        
);
    break;
    case 
2:
        
$form['firstname'] = array(
          
'#type' => 'textfield',
          
'#title' => t('Firstname'),
          
'#description' => t('Enter the answer to the above question.'),
          
'#required' => TRUE,
          
'#weight' => 1,
          
'#suffix' => '<div>'.$step.'</div>'
        
);
        
$form['operation'] = array(
          
'#type' => 'submit',
          
'#value' => t('Submit'),
          
'#weight' => 2
        
);
        
$form['clear'] = array(
        
'#type' => 'submit',
        
'#value' => t('Reset form'),
        
'#validate' => array('my_module_my_form_clear'),
        );
      break;
  }

  return 

$form;
}
function 
my_module_my_form_submit($form, &$form_state) {
  
$form_state['rebuild'] = TRUE;
  
$form_state['storage']['step'] = $form_state['values']['step'];
}
?>