Joomla 1.5 Перенаправление в компонете com_user

Тема в разделе "Программирование", создана пользователем Qutlug_Bulsun, 25.08.2010.

  1. Offline

    Qutlug_Bulsun Недавно здесь

    Регистрация:
    30.07.2010
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Здравствуйте! Не могу разобраться в следующем вопросе: на сайте форма входа для зарегистрированных пользователей вынесена на отдельную страницу. Переход на нее осуществляется по ссылке 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']; Помогите, пожалуйста, разобраться, вопрос не столько принципиальный, сколько интересно, как работает...
     
  2.  
  3. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    Версию джумлы и код метода getReturnURL в файле modules/mod_login/helper.php в студию)
     
  4. Offline

    Qutlug_Bulsun Недавно здесь

    Регистрация:
    30.07.2010
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Версия последняя, 1.5.20
    Метод:
    Код (PHP):
    1. function getReturnURL($params, $type)
    2.     {
    3.         if($itemid =  $params->get($type))
    4.         {  
    5.             $menu =& JSite::getMenu();  
    6.             $item = $menu->getItem($itemid); //var_dump($menu);die;
    7.             if ($item)
    8.             {
    9.                 $url = JRoute::_($item->link.'&Itemid='.$itemid, false);
    10.             }
    11.             else
    12.             {
    13.             // stay on the same page
    14.             $uri = JFactory::getURI();
    15.             $url = $uri->toString(array('path', 'query', 'fragment'));
    16.             }
    17.         }
    18.         else
    19.         {
    20.             // stay on the same page
    21.             $uri = JFactory::getURI();
    22.             $url = $uri->toString(array('path', 'query', 'fragment'));
    23.         }
    24.         return base64_encode($url);
    25.     }
     
  5. Offline

    Qutlug_Bulsun Недавно здесь

    Регистрация:
    30.07.2010
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    В принципе, понятно, почему не работает $_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 (выводится текст " Область для зарегистрированных. Добро пожаловать в раздел пользователя нашего сайта! ")
    Такое чувство, что обработчик как-то очень творчески подходит к полученному параметру ссылки переадресации. А вот как - вопрос...
     
    Последнее редактирование: 26.08.2010
  6. Offline

    Qutlug_Bulsun Недавно здесь

    Регистрация:
    30.07.2010
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Все, снимаю вопрос)) Главный враг как обычно - невнимательность на почве избыточного фанатизма... Расслабляться нужно чаще.
    Решение - в шаблонах mod_login и com_user (файл default_login.php) добавляем две строки и чуть изменяем третью (только в default_login.php).
    Код (PHP):
    1. <?php  
    2. $url = $_SERVER['HTTP_REFERER'];
    3. $return = base64_encode($url)
    4. ?>
    5. <input type="hidden" name="return" value="<?php echo $return; ?>" />
     

Поделиться этой страницей

Загрузка...