我有一个Drupal网站,我想显示不同的欢迎页面,具体取决于我的用户输入的个人资料字段。我无法使用全局$ user变量,因为用户不会自动登录(他们必须在他们登录之前使用他们的电子邮件地址)。
我可以在哪里添加代码来设置重定向? 我在形式验证器中尝试使用$ form ['#redirect']和$ form_state ['redirect'],但这不起作用。
答案 0 :(得分:10)
您可以使用logintobogan获取灵感:
#implementation of hook_user
mymodule_user($op) {
if ($op == 'login') {
$_REQUEST['destination'] = '/user/will/be/redirected/here'
}
}
重要的是要确保在user.module中调用最终drupal_goto()
时,您已设置了$_REQUEST['destination']
。
有几点需要注意:
drupal_goto()
。特别是hook_user或hook_form_alter。 drupal_goto将禁止其他钩子被调用;至少打破功能,但经常破坏你的数据库。drupal_goto()
,例如“_submit”,这可能会破坏许多其他模块甚至可能损坏您的数据库。答案 1 :(得分:1)
与伯克的答案类似,但似乎你只是希望这是一次性的事情。为此,您可以检查$ account->访问属性以检查他们的上次登录。如果为0,则表示他们是第一次登录。
这适用于电子邮件或无电子邮件验证。
<?php
/**
* Implements hook_user().
*/
function mymodule_user($op, &$edit, &$account, $category = NULL) {
switch ($op) {
case 'login':
// execute this if they have never accessed the site before
if ($account->access == 0) {
// run conditional logic based on profile fields
// to set destination here
$_REQUEST['destination'] = 'path/to/welcome-page';
}
break;
}
}
?>
答案 2 :(得分:0)
我建议您使用Login Destionation module,或者您可以使用Rules模块redirect action,这可能是您的目的。
以防您不想编写自己的自定义模块: - )