我正在尝试什么应该是一个简单的代码行,但不起作用。使用以下代码:
drupal_goto("user/register?destination=/node/1");
我将访问者发送到注册页面,该页面一旦完成,他们点击了提交按钮,然后我希望他们重新定向到node / 1。
问题是我在hook_init中实现,我的网站进入无限循环。
有人可以建议我如何让代码执行一次或更合适的drupal挂钩来实现我的代码吗?
答案 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版本。