Здравствуйте! Не могу разобраться в следующем вопросе: на сайте форма входа для зарегистрированных пользователей вынесена на отдельную страницу. Переход на нее осуществляется по ссылке index.php?option=com_user&view=login . Как я понял, в таком случае вывод формы регистрации берет на себя не модуль mod_login, а непосредственно компонент come_user, используя шаблон default_login.php . Задача - сделать переадресацию при удачном входе на предыдущую страницу, с которой был совершен переход на форму регистрации (не на какую-то конкретную, а именно на предыдущую - из соображений юзабилити, чтобы пользователь мог приступить к редактированию нужной статьи). Если я правильно понял, за переадресацию отвечает скрытая форма <input type="hidden" name="return" value="<?php echo $this->return; ?>" /> Но как я не игрался со значением value - либо происходит переадресация на Главную страницу (вне зависимости от того, что указано в насторйках модуля), либо открывается страница с поздравлениями со входом в закрытую часть сайта. Адрес предыдущей страницы брал с помошью $_SERVER['HTTP_REFERER']; Помогите, пожалуйста, разобраться, вопрос не столько принципиальный, сколько интересно, как работает...
Версия последняя, 1.5.20 Метод: Код (PHP): function getReturnURL($params, $type) { if($itemid = $params->get($type)) { $menu =& JSite::getMenu(); $item = $menu->getItem($itemid); //var_dump($menu);die; if ($item) { $url = JRoute::_($item->link.'&Itemid='.$itemid, false); } else { // stay on the same page $uri = JFactory::getURI(); $url = $uri->toString(array('path', 'query', 'fragment')); } } else { // stay on the same page $uri = JFactory::getURI(); $url = $uri->toString(array('path', 'query', 'fragment')); } return base64_encode($url); }
В принципе, понятно, почему не работает $_SERVER['HTTP_REFERER'];. Судя по тому, как реализован метод getReturnURL, обработчик формы требует относительную ссылку (когда URI преобразуется в строку, игнорируются scheme и authority, фактически берется только URN), в то время как HTTP_REFERER выдает URI целиком. Но все равно остается 2 вопроса: 1. Как URI из $_SERVER['HTTP_REFERER']; преобразовать в URN (выкинуть протокол и домен из начала строки); 2. Куда этот URN потом вообще подставлять, учитывая, что даже если забить в форму <input type="hidden" name="return" value="<?php echo $this->return; ?>" /> вместо значения value какой-либо путь - переадресация почему-то все ранво происходит на /index.php?option=com_user (выводится текст " Область для зарегистрированных. Добро пожаловать в раздел пользователя нашего сайта! ") Такое чувство, что обработчик как-то очень творчески подходит к полученному параметру ссылки переадресации. А вот как - вопрос...
Все, снимаю вопрос)) Главный враг как обычно - невнимательность на почве избыточного фанатизма... Расслабляться нужно чаще. Решение - в шаблонах mod_login и com_user (файл default_login.php) добавляем две строки и чуть изменяем третью (только в default_login.php). Код (PHP): <?php $url = $_SERVER['HTTP_REFERER']; $return = base64_encode($url) ?> <input type="hidden" name="return" value="<?php echo $return; ?>" />