解決Xoops模組登入後設定user.php?xoops_redirect轉向頁面&之後變數被去除的問題-教學撰寫:徐嘉裕Neil hsu

在開發Xoops模組時候遇到一個問題,例如mail通知管理員前往查看訂單頁面

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__);
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返回功能!

教學撰寫:徐嘉裕 Neil hsu


留言

這個網誌中的熱門文章

Xoops免費佈景:neilambilight2.5正式版釋出-佈景設計開發:徐嘉裕Neil hsu

Xoops免費佈景:neilambilight2.4正式版釋出-佈景設計開發:徐嘉裕 Neil hsu

在CentOS7上安裝XAMPP並設定允許外部連線phpmyadmin的方法-教學撰寫:徐嘉裕Neil hsu