我们将再次使用 Form API。这一次,我们将创建一个简单的表单,让用户可以选择第三章中创建的 Descartes 主题或者选择 Drupal 内建的 Garland 主题。管理员的选择将决定哪个主题做为默认主题。(当然,管理员以后也可以在Administer | Site building | Themes 更改。)
我们的 philosopherbios_profile_tasks() 函数的第一条 if 语句的最后几行
如下所示:
// Do the form: $task = 'philosopherbios_pick_theme'; $form = drupal_get_form('philosopherbios_theme_form', $url); return $form;
我们现在感兴趣的是最后两行。我们用 drupal_get_form() 函数获取将要显示给用户的表单,然后我们返回这个表单。因为 task 既不是 profile 也不是profile-finished,Drupal 将把表单显示给用户。
drupal_get_form() 的第一个参数是创建表单的回调函数的名字。所有其它参数(在本例中只有 $url)都做为参数传递给回调函数。
现在我们需要编写 philosopherbios_theme_form() 函数。顺便提醒一下,按惯例表单生成函数都以 _form 结尾。我们的函数明码为 philosopherbios_theme_form()。
大多数 Form API 都正如所料,包括验证与提交回调函数。因此,如果我们需要进行某些表单验证,我们所要做的就是定义一个名为philosopherbios_theme_form_validate() 的函数。为了处理提交的表单,我们只需要一个名为 philosopherbios_theme_form_submit() 的函数。
下面就是表单函数的主体:
/** * Form for selecting a theme. */ function philosopherbios_theme_form(&$form_state, $url) { drupal_set_title('Select a Theme'); $form['text'] = array( '#value' => st('Do you want to make Descartes your default theme?'), '#weight' => -1, // <- We want it on top! ); $form['choose_theme'] = array( '#type' => 'radios', '#title' => st('Default Theme'), '#default_value' => 0, '#options' => array(0 => st('Descartes'), 1 => st('Garland')), '#description' => st('Set the default site theme.'), '#weight' => 0, ); $form['submit'] = array( '#type' => 'submit', '#value' => st('Save and continue'), '#weight' => 10, ); $form['#action'] = $url; $form['#redirect'] = FALSE; return $form; }
在前面的章节中,我们已经见过几个这样的函数。
这个表单做的第一件事是用 drupal_set_title() 设置页面的标题。通常,我们依靠 Drupal 基础设施的其它部分创建页面标题。但是现在在安装程序中,我们需要自己来做这件事。
接下来,我们定义了表单,表单有下述几部分组成:
有一行介绍性的文本,提问:你想把 Descartes 设置为默认主题吗?
有一对儿单选按钮(每一项都是用 '#type' => 'radios' 定义的)让用户可以在 Descartes 和 Garland 之间做出选择。
有一个提交按钮,上面的文字为 “Save and continue”(保存并继续)。
表单的最后是两条附加属性:
$form['#action'] = $url; $form['#redirect'] = FALSE;
第一条告诉表单应该去哪里(与 HTML <form> 标签的 action 属性类似)。第二条通常用于告诉 Drupal 表单处理完成后把用户重定向到哪里。不过,我们不想把用户重定向到别处——我们希望它们完成安装。因此必须把它设置为 FALSE。
当表单用 drupal_get_form() 渲染完并送往浏览器时,它看起来如下图所示:

图 9-6
当用户按下 Save and continue 按钮后,会发生什么情况呢?
表单被提交到 $url 指定的 URL(大多数安装程序正好使用同一个 URL——安装程序的状态并未与 URL 相关联。)这将导致 install.php 中的代码再次被执行。这意味着它将检查并找出当前的任务是什么。
评论
发表新评论