drupal表单与目标重定向

时间:2011-12-20 20:58:20

标签: redirect drupal drupal-6 hook

我正在尝试什么应该是一个简单的代码行,但不起作用。使用以下代码:

drupal_goto("user/register?destination=/node/1");

我将访问者发送到注册页面,该页面一旦完成,他们点击了提交按钮,然后我希望他们重新定向到node / 1。

问题是我在hook_init中实现,我的网站进入无限循环。

有人可以建议我如何让代码执行一次或更合适的drupal挂钩来实现我的代码吗?

3 个答案:

答案 0 :(得分:2)

如果您希望在用户提交注册表单时专门进行重定向,那么您将要通过实施 hook_form_FORMID_alter 并添加'#redirect'属性来改变user_register表单,如:

/**
 * Implementation of hook_form_FORMID_alter().
 * @param $form
 * @param $form_state
 * @return void
 */
function MYMODULE_form_user_register_alter(&$form, &$form_state) {
  $form['#redirect'][] = 'node/1';
}

这样,Drupal会注册用户,然后将他/她发送到 node / 1

现在,如果您希望在用户登录之后发生这种情况(无论是“注册后”登录还是正常登录),那么您可能会想要在'login'操作中的hook_user实现中使用drupal_goto()(即$op == 'login'时)

答案 1 :(得分:1)

我认为将此添加到您的template.php中会执行此操作:

    function phptemplate_menu_item_link($link) {
      if ($link['tab_root'] == 'user' && !empty($_GET['destination'])) {
        $link['localized_options']['query'] = drupal_get_destination();
      }
      return l($link['title'], $link['href'], $link['localized_options']);
    }

我在这里写了一篇关于我为什么要这样做的博客文章:http://tappetyclick.com/blog/2013/04/11/maintain-destination-drupal-user-account-menu#.UWbt8hcmdIE还有其他一些用户提示也可以提供帮助

答案 2 :(得分:0)

听起来你需要在进行重定向之前确保你还没有登录,在节点/ 1,用户/注册或其他不适当的路径上,否则你只是盲目地重定向并导致循环, 对?另外,您还需要允许用户登录,对吧?

因此,您首先要确保用户未登录,并且他们尚未在用户路径上将匿名用户发送到“用户”页面(或用户/注册):

  if(($user->uid == 0) && (arg(0) != 'user')){
    drupal_goto('user');
  }

然后使用node/1而不是hook_user_login()执行hook_init()重定向。

根据我对您的用例的理解,至少这对我来说是有意义的。

您可能还想考虑使用Login destination模块,该模块具有稳定的D6和D7版本。