我在Drupal 7 - FAPI中创建了一个多步骤表单。
在主hook_form()中,对不同步骤的重定向是handeled。
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步中,我有一个可选按钮' Add onther'这会将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 ['值'],但没有成功。谁可以通过添加其他功能实现多步骤?
答案 0 :(得分:0)
您正在寻找的函数是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