如何解决用户注册后如何使Drupal重定向到页面
| 我有一个Drupal网站,我想显示不同的欢迎页面,具体取决于我的用户作为个人资料字段输入的内容。我不能使用全局$ user变量,因为用户不会自动登录(他们必须先输入自己的电子邮件地址,然后才能登录)。 在哪里可以添加代码来设置重定向? 我已经在表单验证器中尝试了$ form [\'#redirect \']和$ form_state [\'redirect \'],但是没有用。解决方法
您可以使用logintobogan获得灵感:
#implementation of hook_user
mymodule_user($op) {
if ($op == \'login\') {
$_REQUEST[\'destination\'] = \'/user/will/be/redirected/here\'
}
}
重要的是要确保在user.module中调用最后的ѭ1时,已经设置了$_REQUEST[\'destination\']
。
注意事项:
Logintoboggan有很多代码可以处理各种边缘情况,例如重定向到/重定向到https。如果您的情况很简单,则可以忽略这些。
您的模块必须在user.module之后调用,并且可能在其他实现hook_user的模块之后调用,因为它们也可能会更改此全局变量。非常难看,但这在Drupal中起作用。
切勿在任何挂钩中发出drupal_goto()
。尤其不是hook_user或hook_form_alter。 drupal_goto将禁止其他钩子被调用;至少破坏功能,但经常破坏数据库。
不要在form_alter回调(例如\“ _ submit \”)中发出“ 1”,否则可能会破坏许多其他模块,甚至可能损坏您的数据库。
,与Berke的答案类似,但似乎您只是希望这是一次性的事情。为此,您可以检查$ account-> access属性以检查其最后一次登录。如果为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;
}
}
?>
,我建议您使用“登录目标”模块,或者可以使用“规则”模块重定向操作,该操作可能对您的目的而言很强大。
以防万一您不想编写自己的自定义模块:-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。