drupal主题选择表单

我们将再次使用 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 中的代码再次被执行。这意味着它将检查并找出当前的任务是什么。

评论

发表新评论

此内容将保密,不会被其他人看见。
  • 允许HTML标签:<a> <img><em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p>
  • 自动断行和分段。

更多关於格式化选项的信息

Image CAPTCHA
验证码
|