您在這裡

如何控制登入後訪問的第一頁

say2sky's 的頭像
say2sky 在 2008-06-25 (三) 07:47 發表

找到一個login destination模組,是控制登入後目的地的。

但是又不想用太多模組,以免升級時模組滯後。

1)是不是有比較簡單達到改變登入後目的地的方法,如幾行php code
2)前面有指導說 通過在路徑後加?destination=??, 可實現直接跳轉,但是這?destination=??是如何加到路徑上的呢?

謝謝!

1 可以 hook_user 來達成


<?php
function mymodule_user($op, &$edit, &$account){
switch($op){
case 'login':
drupal_goto('mypath/xxx');
break;
}
}
?>

$op 為 'login' 的時候表示使用者已經登入
此時使用 drupal_goto() 來把使用者轉向即可
如果只有 處理 login 的話 switch 的部分可以改成直接用 if($op == 'login') drupal_goto('path/xxx');

2 destination 的部分
最簡單的做法就是直接打在路徑後面
或是用drupal產生連結的funciton => l('登入', 'user/login', Null, 'destination=path/xxx') 來建立連結 (function 是小寫 L)
用內建的 menu 應該是沒辦法使用

如果是用 user/login 頁面來進行登入
可以建立一個連結為 user/login?destination=path/xxx
點選該連結後 還是會顯示相同的登入表單
但是送出之後會被導至 destination 所設定的路徑

destination 的設定
必須是表單
或是該頁面有使用 drupal_goto() 來轉向
才會有作用
因為 drupal_goto() 會去檢查是否有設定 destination

至於如果是要修改 user login block 的話
則必須在 form_alter 裡面
去修改 user_login_block 這個表單的 form['action']

所以單就登入來講的話
不管是用 user/login 頁面登入
或是用 user login block 登入
都會被 hook_user 下的 $op == 'login' 處理到
直接在 hook_user 下面寫應該是比較方便的

写的很好,再问一下:
drupal默认的发表内容后的redirected路径是什么?我的怎么提交完一篇内容后就显示一个这样的连接:
The user is being redirected to http://127.0.0.1/drupal-5.6/node/79#comment-18.不能直接回到刚才发布内容的页,和这里不一样,这个网站的代码做过修改吗?