在開發Xoops模組時候遇到一個問題,例如mail通知管理員前往查看訂單頁面
http://loveimag.myasustor.com/paulchan/modules/neilshop/shoppingcart.php?op=ordercontent&suid=1&orderid=6
http://loveimag.myasustor.com/paulchan/modules/neilshop/shoppingcart.php?op=ordercontent&suid=1&orderid=6
然後這個頁面需要有會員權限才能觀看,所以如果沒登入情況點了連結會進到會員登入頁面,登入後返回網站首頁而不是連結頁面,Xoops本身有個個機制能夠在登入後返回原本連結頁面,就使用xoops_redirect變數
例如:
//會員判斷
if(empty($xoopsUser)){
redirect_header(XOOPS_URL. "/user.php?xoops_redirect=/modules/neilshop/shoppingcart.php?op=ordercontent&suid=1&orderid=6" ,0 , _MD_SHOPPINGCART01);
}
紅字部分為返回網址,傳給user.php?xoops_redirect接收,可以改成/modules/".$xoopsModule->getVar('dirname')./basename(__FILE__).$_SERVER[QUERY_STRING]
問題來了,xoops_redirect使用get方法接收變數,原本傳過去的/modules/neilshop/shoppingcart.php?op=ordercontent&suid=1&orderid=6
&之後的變數會被去掉變成/modules/neilshop/shoppingcart.php?op=ordercontent返回頁面,少了&suid=1&orderid=6就無法開啟正確的資料,相信很多朋友因該也遇到這問題,苦思之後終於想出解決方法,就是利用base64編碼功能先吧傳過去xoops_redirect的網址改成base64編碼格式,像是這樣
user.php?xoops_redirect=/modules/neilshop/shoppingcart.php?url=P29wPW9yZGVyY29udGVudCZzdWlkPTEmb3JkZXJpZD0x
然後返回網址再用base64解編碼吧原本的變數解出來就ok了,經測試一切正常!!code如下:
$url=isset($_REQUEST['url'])?$_REQUEST['url']:"";
if(!empty($url)){ //如果$url有值表示為xoops_redirect回傳變數
//base64解碼
$url64=base64_decode($url);
$page=basename(__FILE__);
$page=basename(__FILE__);
redirect_header(XOOPS_URL. "/modules/".$xoopsModule->getVar("dirname")."/".$page."".$url64."" ,0 , _MS_SHOPPINGCART150);
}
$httpstring="'?'".$_SERVER[QUERY_STRING]."";
//base64編碼
$url64=base64_encode($httpstring);
$page=basename(__FILE__);
//會員判斷
if(empty($xoopsUser)){
redirect_header(XOOPS_URL. "/user.php?xoops_redirect=/modules/".$xoopsModule->getVar('dirname')."/".$page."?url=".$url64."" ,0 , _MD_SHOPPINGCART01);
}
這樣登入後返回原本頁面的功能就完成了,有需要的朋友參考看看!!
備註說明:需要安裝profile模組才能使用xoops_redirect返回功能!
備註說明:需要安裝profile模組才能使用xoops_redirect返回功能!
教學撰寫:徐嘉裕 Neil hsu
留言
張貼留言