You are here

drupal跨页面表单(3)

g089h515r806 的头像
Submitted by g089h515r806 on 星期三, 2009-08-19 09:24

老葛的Drupal培训班 Think in Drupal

在这个简单模块中,我们需要注意几点。在我们的表单构建函数formwizard_multiform()中,我们有一个参数$form_state,用来提供表单的状态信息。让我们看一下整个流程。如果我们访问http://example.com/?q=formwizard, 我们得到初始的表单,如图10-7所示:
10-7 多步表单的初始步
 
    当我们点击“Next”按钮时,Drupal处理本表单的方式和其它表单一样:构建表单,调用验证函数,调用提交函数。但是如果我们还没有处于表单的最后一步,那么提交函数将会简单得返回。Drupal将会注意到存储箱$form_state['storage']中存放的数值,所以它将会再次调用表单构建函数,这次带了一个$form_state的拷贝。(我们也可以设置$form_state['rebuild']来进行重新构建,但是当$form_state['storage']中有值时就不再需要设置它了。)再次调用表单构建函数,并将$form_state传递给我们模块的formwizard_multiform(),该函数将通过查看$form_state['storage']['step']的值,来判定我们所处的步骤并构建相应的表单。我们将得到如图10-8所示的表单。
 
10-8 多步表单的第二步
   

Drupal版本:

评论

biglazy 的头像

按照原文意思,代码应该有如下修改:

$step = isset($form_state['values']) ? (int)$form_state['storage']['step'] : 1;

(否则不会出现本页中所说的图10-7中的从step1开始的情况,会从step0开始)