如何在Drupal中的“拒绝访问”页面上保留表单数据?

时间:2010-04-12 21:25:32

标签: drupal drupal-6

我们正在构建一个小型子站点,在首页上有一个用户可以提交的输入框表单。从那里,他们被带到一个页面,其中包含更多相关的表单字段(添加更多详细信息,标记它等),并且第一个主要表单字段已经填写。到目前为止,这非常有效。

问题出现在没有登录的用户身上。当他们提交第一个表单时,他们会被带到(LoginToboggan)登录页面,允许他们登录。登录后,他们会重定向到第二个表单页面,但第一个主表单字段未填写 - 换句话说,表单数据不会持续存在。

我们如何存储这些数据并将其保留在访问被拒绝的页面中?

2 个答案:

答案 0 :(得分:1)

您可以将数据保存在cookie中,该cookie将在登录页面后传递给页面。

假设您使用Form API创建表单,并且在函数中有一个名为“fieldname”的字段来生成表单:

function my_form() {
  $form['fieldname'] = array (
    '#type'          => 'textfield',
    '#title'         => 'Some fieldname'
  );

  // Second field if you need to save another
  $form['fieldname2'] = array (
    '#type'          => 'textfield',
    '#title'         => 'Some other fieldname'
  );
}

在表单的提交处理程序中设置cookie:

function my_form_submit($form, &$form_state) {
  // Set the cookie with their data before they are redirected to login
  // Use the array syntax if you have one than one related cookie to save,
  //   otherwise just use setcookie("fieldname",...

  setcookie("saved_data[fieldname]", $form_state['values']['fieldname']);

  // Your other code
}

登录并重定向到表单的第二页后,您可以读取cookie的值,如果存在,请将它们插入字段的默认值中:

function my_form() {
  if (isset($_COOKIE['saved_data[fieldname]'])) {
    $default_fieldname = $_COOKIE['saved_data[fieldname]'];
  }
  else {
    $default_fieldname = '';
  }

  // Same check for the second field
  if (isset($_COOKIE['saved_data[fieldname2]']))...

  $form['fieldname'] = array (
    '#type'          => 'textfield',
    '#title'         => 'Some fieldname',
    '#default_value' => $default_fieldname
  );

  // Second field if used
  $form['fieldname2'] = array (
    '#type'          => 'textfield',
    '#title'         => 'Some other fieldname',
    '#default_value' => $default_fieldname2
  );
}

在设置完成后,每个页面加载都会显示cookie,因此,如果有多个登录尝试失败或其他页面查看次数无关紧要。您应该在使用完cookie后删除它们,或设置一个较短的过期时间,以便自动清理它们。

答案 1 :(得分:0)

我不知道是否有一种很好的方法可以在Drupal中从两种完全不同的形式传输表单数据,尤其是在访问被拒绝的情况下。我能找到的最佳选择是:

  • 使用网址发送字段数据。
  • 您也可以将数据保存在数据库中,但再次提取数据可能有点棘手。