Как создать кнопку назад в многошаговой форме?

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

Аватар пользователя Positiff Positiff 16 декабря 2010 в 14:55

Как создать кнопку назад в многошаговой форме?

Форма из нескольких шагов. после каждого шага в функции form_submit текущие значения сохраняются в 'storage'
$form_state['storage']['page_one_values'] = $form_state['values'];

В заключении все массивы объединяются
$form_state['values'] = array_merge($form_state['values'],$form_state['storage']['page_two_values'], $form_state['storage']['page_one_values']);

Создаю кнопку назад, но значения все стираются при возврате - как сделать так чтобы они сохранялись?

Пробовал сделать через установку default_value вытаскиванием из form_storage, но мне кажется должен быть какой то более простой способ.

Заранее спасибо

Комментарии

Аватар пользователя wolfXXXL wolfXXXL 16 декабря 2010 в 17:50

Вы наверное по кнопке делает шаг назад в браузере, можете сделать свою кнопку такую же как и далее, но по клику рендерить форму с предыдущим шагом доставая значения с $form_state['storage'] соответственно.
Ведь не что Вам не мешает, как формировать форму по шагам анализируя какой-то параметр, сформировать имитацию шагов назад.
P.S. Посмотрите эту статью

Аватар пользователя Positiff Positiff 16 декабря 2010 в 18:19

Я так понимаю нужно как то передать (заполнить) $form_values значениями из $form_storage, просто приравнять почему то не работает - может у меня в функциях неправильно переменные объявлены?

Аватар пользователя VVS VVS 22 декабря 2010 в 14:23

У меня такая же проблема сейчас.
[##999558]Здесь[/##] нашёл вариант для 7.х, буду пробовать:

<?phpfunction form_example_tutorial_8_next_submit($form, &$form_state) {
...
  // This won't actually work for any fields that have #limit_validation_errors set
  // because Drupal has destroyed the $form_state values that haven't been validated.
  // To make page 2 remember "color" setting after going Back, remove #limit_validation_errors
  // and remove '#required' => TRUE, on the color element.
  if (!empty($form_state['page_values'][2])) {
    $form_state['values'] = $form_state['page_values'][2];
  }
...
}
?>

Но еще есть проблема в том, что при нажатии в браузере назад - форма слетает полностью...

Аватар пользователя Positiff Positiff 26 декабря 2010 в 11:46

У меня по такому варианту восстанавливаются только значения CCK полей.

Стандартные поля, вроде заголовка ноды, описания, и выбранного терма таксономии не восстанавливаются.