ทำให้ผู้ใช้ redirect กลับมายังคอมโพเนนท์หลังจากการ login

แก้ไขล่าสุด ใน วันจันทร์ที่ 26 กันยายน 2554 เวลา 22:33 น.
เขียนโดย ประสิทธิ์ เก็บทรัพย์
วันเสาร์ที่ 26 เมษายน 2551 เวลา 01:48 น.
สวัสดีครับ วันนี้เราจะมาทำการแก้ไข Joomla! เพื่อให้สามารถทำให้ component สามารถส่งผู้ใช้ไปยังหน้า login และให้กลับมายังหน้าคอมโพเนนท์ หลังจาก login แล้วเพื่อที่ผู้ใช้จะได้เริ่มใช้งานได้เลยทันที โดยปกติ Joomla! จะอนุญาติให้กำหนดหน้าที่จะ redirect user ไปหลังจาก login หรือ logout แล้ว โดยการ load ค่านี้จาก parametes และกำหนดเป็น hidden value ให้แก่ login form
login form จะอยู่ในไฟล์ /components/com_login/login.html.php ซึ่งเป็นไฟล์ที่เราจะทำการแก้ไข โดยการค้นหาที่บรรทัดประมาณ 119 เราจะพบ source code ดังนี้
<?php
// displays back button
mosHTML::BackButton ( $params );
?>
<input type="hidden" name="op2" value="login" />
<input type="hidden" name="return" value="<?php echo sefRelToAbs( $return ); ?>" />
<input type="hidden" name="lang" value="<?php echo $mosConfig_lang; ?>" />
<input type="hidden" name="message" value="<?php echo $params->get( 'login_message' ); ?>" />
<input type="hidden" name="<?php echo $validate; ?>" value="1" />
</form>
%3C%3Fphp%0A%C2%A0%C2%A0%2F%2F%20displays%20back%20button%0A%C2%A0%C2%A0mosHTML%3A%3ABackButton%20%28%20%24params%20%29%3B%20%0A%C2%A0%C2%A0%3F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22op2%22%20value%3D%22login%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22return%22%20value%3D%22%3C%3Fphp%20echo%20sefRelToAbs%28%20%24return%20%29%3B%20%3F%3E%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22lang%22%20value%3D%22%3C%3Fphp%20echo%20%24mosConfig_lang%3B%20%3F%3E%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22message%22%20value%3D%22%3C%3Fphp%20echo%20%24params-%3Eget%28%20%27login_message%27%20%29%3B%20%3F%3E%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22%3C%3Fphp%20echo%20%24validate%3B%20%3F%3E%22%20value%3D%221%22%20%2F%3E%0A%C2%A0%C2%A0%3C%2Fform%3E
ทำการแทรก code ดังข้างล่าง แสดงการเปลี่ยนแปลงหลังจากทำการแก้ไขแล้ว
<?php
// displays back button
mosHTML::BackButton ( $params );
//Added by Prasit Gebsaap to pass return in $_GET variables
$returnTo = mosGetParam($_GET, "return", null);
$return = sefRelToAbs($returnTo);
}
//end of added .....
?>
<input type="hidden" name="op2" value="login" />
<input type="hidden" name="return" value="<?php echo sefRelToAbs( $return ); ?>" />
<input type="hidden" name="lang" value="<?php echo $mosConfig_lang; ?>" />
<input type="hidden" name="message" value="<?php echo $params->get( 'login_message' ); ?>" />
<input type="hidden" name="<?php echo $validate; ?>" value="1" />
</form>
%3C%3Fphp%0A%C2%A0%C2%A0%2F%2F%20displays%20back%20button%0A%C2%A0%C2%A0mosHTML%3A%3ABackButton%20%28%20%24params%20%29%3B%20%0A%C2%A0%C2%A0%2F%2FAdded%20by%20Prasit%20Gebsaap%20to%20pass%20return%20in%20%24_GET%20variables%0A%C2%A0%C2%A0%24returnTo%20%3D%20mosGetParam%28%24_GET%2C%20%22return%22%2C%20null%29%3B%0A%C2%A0%C2%A0if%20%28isset%28%24returnTo%29%29%20%7B%0A%C2%A0%C2%A0%C2%A0%24return%20%3D%20sefRelToAbs%28%24returnTo%29%3B%C2%A0%0A%C2%A0%C2%A0%7D%0A%C2%A0%C2%A0%2F%2Fend%20of%20added%20.....%0A%C2%A0%C2%A0%3F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22op2%22%20value%3D%22login%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22return%22%20value%3D%22%3C%3Fphp%20echo%20sefRelToAbs%28%20%24return%20%29%3B%20%3F%3E%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22lang%22%20value%3D%22%3C%3Fphp%20echo%20%24mosConfig_lang%3B%20%3F%3E%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22message%22%20value%3D%22%3C%3Fphp%20echo%20%24params-%3Eget%28%20%27login_message%27%20%29%3B%20%3F%3E%22%20%2F%3E%0A%C2%A0%C2%A0%3Cinput%20type%3D%22hidden%22%20name%3D%22%3C%3Fphp%20echo%20%24validate%3B%20%3F%3E%22%20value%3D%221%22%20%2F%3E%0A%C2%A0%C2%A0%3C%2Fform%3E
ใน component ของเราทำการ redirect ไปยัง com_login โดยการเพิ่ม parameter return=[link_to_our_component] อย่าลืมใช้ sefRelToAbs ด้วยนะครับ
$Itemid =
intval(mosGetParam
($_REQUEST,
'Itemid',
0));
$returnTo =
urlencode("index.php?option=com_hydra&Itemid=".
$Itemid);
mosRedirect(sefRelToAbs('index.php?option=com_login&Itemid='.$Itemid.'&return='.$returnTo));
%24Itemid%20%3D%20intval%28mosGetParam%28%24_REQUEST%2C%20%27Itemid%27%2C%200%29%29%3B%0A%C2%A0%24returnTo%20%3D%20urlencode%28%22index.php%3Foption%3Dcom_hydra%26amp%3BItemid%3D%22.%24Itemid%29%3B%0A%C2%A0mosRedirect%28sefRelToAbs%28%27index.php%3Foption%3Dcom_login%26amp%3BItemid%3D%27.%24Itemid.%27%26amp%3Breturn%3D%27.%24returnTo%29%29%3B%0A%C2%A0exit%28%29%3B