Drupal 7 - многоступенчатая форма FAPI - очистить значения form_state - добавить другую опцию
Я создаю многошаговую форму в Drupal 7 - FAPI.
В основной функции hook_form() перенаправление на разные этапы осуществляется вручную.
function hook_form($form, &$form_state) {
if (empty($form_state['storage']['step'])) {
$form_state['storage']['step'] = 0;
}
switch($form_state['storage']['step']) {
case 0:
$form= _step_0($form, $form_state);
break;
case 1:
$form = _step_1($form, $form_state);
break;
case 2:
$form = _step_2($form, $form_state);
break;
case 3:
$form = _step_3($form, $form_state);
break;
case 99:
$form = _step_end($form, $form_state);
break;
}
return $form;
}
На шаге 2 у меня есть дополнительная кнопка "Добавить еще", которая сохраняет значения form_values в хранилище и перезагружает ту же форму (шаг 2). Но когда он перезагружает эту форму в течение секунд. предыдущие значения формы представляются как значения формы по умолчанию, а не как пустая (новая) форма, которая требуется.
function inschrijven_form_submit($form, &$form_state) {
switch ($form_state['storage']['step']) {
case 0:
switch($form_state['values']['op']) {
case 'Next' :
....
$form_state['storage']['step'] = 1;
break;
}
break;
case 1:
switch($form_state['values']['op']) {
case 'Next' :
....
$form_state['storage']['step'] = 2;
break;
}
break;
case 2:
switch($form_state['values']['op']) {
case 'Next' :
....
$form_state['storage']['step'] = 3;
break;
case 'Add another' :
$form_state['rebuild'] = TRUE;
....
$form_state['storage']['step'] = 2;
return;
break;
.....
}
}
Я пытался очистить form_state['values'] вручную после каждой отправки, но безуспешно. Кому может быть обеспечен этот многоступенчатый шаг с дополнительным функционалом?
1 ответ
Функция, которую вы ищете, это form_set_value ($ element, $ value и $form_state).
Формы API немного сложнее. При работе с FAPI я рассуждал, что $ form_state всегда отражает переменную $ form, которая передается в форму. $ form_state позволяет легко получить значения. Каждый раз, когда вы переключаетесь на другую проверку, создается впечатление, что $ form_state обновляется из значений "$ form".
Если вы используете form_set_value, вы сможете передавать состояние между валидациями.
Ура! http://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7