2

如果已登录的用户尝试访问它,我想将“homebox/1”的请求重定向到“homebox/1/[uid]”。我现在还不关心匿名用户。

这是我放入首页-homebox.tpl.php 的代码:

if(!is_numeric(arg(2))){
global $user;
if($user->uid){
    if(count($_GET) > 1){
        $get = array();
        foreach($_GET as $k=>$v){
            if($k != 'q')
                $get[] = $k.'='.$v;
        }
        $get2 = '?'.implode('&',$get);
    }
    header("HTTP/1.1 301 Moved Permanently");
    header('location:/homebox/1/'.$user->uid.$get2);
}else{
    //redirect to error page
}
}

但是,*.tpl.php 文件是否在请求后期处理?在那种情况下,我这样做效率很低。

我知道路径重定向模块(http://drupal.org/project/path_redirect)。我不想使用它,因为我想了解是否有任何 Drupal API 用于重定向和/或在处理链开始时捕获和重定向请求的方法。

谢谢阿鲁尔

4

1 回答 1

8

您可能不得不使用hook_menu_alter()但看起来 homebox_menu() 函数并没有为 homebox/ 定义一个条目

因此,您只需编写自己的hook_menu实现与 homebox/ 匹配并定义一个回调并将您的逻辑放在那里。

您可能希望用户drupal_goto()自己进行重定向。

从模板中删除此类逻辑做得很好。

于 2009-08-26T10:53:50.317 回答