Joomla 1.5 Редирект в авторизации своего компонента

Тема в разделе "Создание расширений для Joomla", создана пользователем FeaMor, 17.02.2010.

  1. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Здравствуйте!

    Подскажите пожалуйста, как сделать так, чтобы при заходе на собственный компонент, была проверка на авторизацию так, чтобы, если человек не авторизирован/не зарегистрирован, перенаправлялся на страницу авторизации, после которой попадал опять на страницу компонента.

    Я пробовал сделать так:
    Код (PHP):
    1. $user =& JFactory::getUser();
    2. if (!$user->id) {
    3.     $mainframe->redirect( 'index.php?option=com_user&view=login', JText::_('ALERTNOTAUTH') );
    4. }
    5. else { тело компонента }


    но при таком написании кода обратного перенаправления после авторизации на компонент не происходит (( (переадресация идет на главную страницу)
     
  2.  
  3. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
  4. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Вопрос заключается именно в том, что бы при авторизации, пользователь редиректился на компонент, с которого и ушел на авторизацию...
    В отдельном модуле авторизации это легко настраивается в параметрах, а вот компонент авторизации я не знаю как настраивать ((
    В вышеупомянутом ответе я решение, увы, не нашел :(
     
    Последнее редактирование: 17.02.2010
  5. omfgpanda
    Offline

    omfgpanda Недавно здесь => Cпециалист <=

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    хмм.... хорошо... завтра постараюсь ответить на ваш вопрос )
     
    Greck нравится это.
  6. Greck
    Offline

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

    Регистрация:
    08.11.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Как-то так:

    Код (PHP):
    1. $user =& JFactory::getUser();
    2.  
    3. if ($user->guest!=0) {
    4.  
    5.         $return=base64_encode($_SERVER["REQUEST_URI"]);
    6.         $mainframe->redirect( 'index.php?option=com_user&view=login&return='.$return, JText::_('ALERTNOTAUTH') );
    7.  
    8. }
    9.  
    10. else { тело компонента }


    В любом случае передается здесь:
    \www\components\com_user\views\login\tmpl\default_login.php
    передается в переменной return
    Код (html):
    1. <input type="hidden" name="return" value="<?php echo $this->return; ?>" />
     
    Последнее редактирование: 19.02.2010
  7. Greck
    Offline

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

    Регистрация:
    08.11.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Вместо $_SERVER["REQUEST_URI"] есть Джумловская функция, но я ее не помню, может кто-то подскажет.
     
  8. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Спасибо за помощь! Особенно Greck'у!
    Использовал запись:
    Код (PHP):
    1. $user =& JFactory::getUser();
    2. if (!$user->id) {
    3.     $return=base64_encode($_SERVER["REQUEST_URI"]);
    4.     $mainframe->redirect( 'index.php?option=com_user&view=login&return='.$return, JText::_('ALERTNOTAUTH') );
    5. }
    6. else { тело компонента }

    а запись ($user->id!=0) говорит, по-моему, наоборот об авторизированных пользователях...
    А про джумловские функции на русском мало где и чего написано (((
     
  9. Greck
    Offline

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

    Регистрация:
    08.11.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Да, подразумевалось: $user->guest!=0 (исправил в исходном сообщении, что бы кто-нибудь не скопировал)
    Вот что делает недосыпание :)
     
  10. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Я не смог найти аналог у джумловских функций ((( Может кто подскажет вообще где искать?!
     
  11. Greck
    Offline

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

    Регистрация:
    08.11.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    Судя по всему: JRequest::getURI()
    Сейчас не могу проверить.

    Вообще, описание API здесь:
    http://api.joomla.org

    Но я ищу в исходниках. Берем Total Commander или что-то что может искать в файлах, забиваем в поиск известную нам функцию: $_SERVER["REQUEST_URI"] Находим файл с функцией getInstance, опять ищем getInstance находим getURI, ищем getURI и убеждаемся, что функция JRequest::getURI() много где используется и скорее всего делает то, что нам нужно.

    PS
    Для Спасибо есть плюсик :)
     
  12. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Да, все верно!
    Использовал следующий код, все прекрасно работает:
    Код (PHP):
    1. $user =& JFactory::getUser();
    2. if (!$user->id) {
    3.     $return=base64_encode(JRequest::getURI());
    4.     $mainframe->redirect( 'index.php?option=com_user&view=login&return='.$return, JText::_('ALERTNOTAUTH') );
    5. }
    6. else { тело компонента }


    Только вот единственный вопрос остался: а что лучше использовать $_SERVER["REQUEST_URI"] или JRequest::getURI()? Ведь где-то должно быть хоть на долю секунды, но дольше и т.п. А если это абсолютно равноценные функции, то зачем джумле своя нужна?
     
  13. Greck
    Offline

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

    Регистрация:
    08.11.2008
    Сообщения:
    19
    Симпатии:
    0
    Пол:
    Мужской
    В данном случае, по скорости - одинаково. Файл все-равно уже подключен. Чем-то отличаются, какие-то доп проверки, возможно защита от взлома, не зря же там 50 строк кода :) С точки зрения идеологии, правильней использовать ту функцию, которую дает фрейморк.

    Любой фреймворк - это минус в производительности. Быстро, когда один php-файл без расширений, языковых штук, итп. При использовании фреймворка Джумлы иногда можно экономить на запросах к БД, например, если нужно получить имена 100 пользователей, то правильнее написать свой запрос, а не цикл с использованием класса JUser. В случае же с подключением файлов - нет смысла задумываться о производительности, все-равно joomla их несколько десятков подключает, а риск напороть говнокод в погоне за копеечным выиграшем в скорости больше.
     
    Последнее редактирование: 23.02.2010

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

Загрузка...