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 )について知っています。リダイレクト用のDrupalAPIや、処理チェーンの最初でリクエストをキャッチしてリダイレクトするメソッドがあるかどうかを知りたいので、これは使用したくありません。

ありがとうアルル

4

1 に答える 1

8

hook_menu_alter()を使用する必要があったかもしれませんが、homebox_menu()関数はhomebox/のエントリを定義していないようです。

したがって、homebox /に一致する独自のhook_menu実装を記述し、コールバックを定義して、そこにロジックを配置するだけです。

おそらく、drupal_goto()を使用してリダイレクト自体を実行することをお勧めします。

テンプレートからそのようなロジックを削除することを検討するためによくやった。

于 2009-08-26T10:53:50.317 に答える