Здравствуйте! Подскажите пожалуйста, как сделать так, чтобы при заходе на собственный компонент, была проверка на авторизацию так, чтобы, если человек не авторизирован/не зарегистрирован, перенаправлялся на страницу авторизации, после которой попадал опять на страницу компонента. Я пробовал сделать так: Код (PHP): $user =& JFactory::getUser(); if (!$user->id) { $mainframe->redirect( 'index.php?option=com_user&view=login', JText::_('ALERTNOTAUTH') ); } else { тело компонента } но при таком написании кода обратного перенаправления после авторизации на компонент не происходит (( (переадресация идет на главную страницу)
Вопрос заключается именно в том, что бы при авторизации, пользователь редиректился на компонент, с которого и ушел на авторизацию... В отдельном модуле авторизации это легко настраивается в параметрах, а вот компонент авторизации я не знаю как настраивать (( В вышеупомянутом ответе я решение, увы, не нашел
Как-то так: Код (PHP): $user =& JFactory::getUser(); if ($user->guest!=0) { $return=base64_encode($_SERVER["REQUEST_URI"]); $mainframe->redirect( 'index.php?option=com_user&view=login&return='.$return, JText::_('ALERTNOTAUTH') ); } else { тело компонента } В любом случае передается здесь: \www\components\com_user\views\login\tmpl\default_login.php передается в переменной return Код (html): <input type="hidden" name="return" value="<?php echo $this->return; ?>" />
Спасибо за помощь! Особенно Greck'у! Использовал запись: Код (PHP): $user =& JFactory::getUser(); if (!$user->id) { $return=base64_encode($_SERVER["REQUEST_URI"]); $mainframe->redirect( 'index.php?option=com_user&view=login&return='.$return, JText::_('ALERTNOTAUTH') ); } else { тело компонента } а запись ($user->id!=0) говорит, по-моему, наоборот об авторизированных пользователях... А про джумловские функции на русском мало где и чего написано (((
Да, подразумевалось: $user->guest!=0 (исправил в исходном сообщении, что бы кто-нибудь не скопировал) Вот что делает недосыпание
Судя по всему: JRequest::getURI() Сейчас не могу проверить. Вообще, описание API здесь: http://api.joomla.org Но я ищу в исходниках. Берем Total Commander или что-то что может искать в файлах, забиваем в поиск известную нам функцию: $_SERVER["REQUEST_URI"] Находим файл с функцией getInstance, опять ищем getInstance находим getURI, ищем getURI и убеждаемся, что функция JRequest::getURI() много где используется и скорее всего делает то, что нам нужно. PS Для Спасибо есть плюсик
Да, все верно! Использовал следующий код, все прекрасно работает: Код (PHP): $user =& JFactory::getUser(); if (!$user->id) { $return=base64_encode(JRequest::getURI()); $mainframe->redirect( 'index.php?option=com_user&view=login&return='.$return, JText::_('ALERTNOTAUTH') ); } else { тело компонента } Только вот единственный вопрос остался: а что лучше использовать $_SERVER["REQUEST_URI"] или JRequest::getURI()? Ведь где-то должно быть хоть на долю секунды, но дольше и т.п. А если это абсолютно равноценные функции, то зачем джумле своя нужна?
В данном случае, по скорости - одинаково. Файл все-равно уже подключен. Чем-то отличаются, какие-то доп проверки, возможно защита от взлома, не зря же там 50 строк кода С точки зрения идеологии, правильней использовать ту функцию, которую дает фрейморк. Любой фреймворк - это минус в производительности. Быстро, когда один php-файл без расширений, языковых штук, итп. При использовании фреймворка Джумлы иногда можно экономить на запросах к БД, например, если нужно получить имена 100 пользователей, то правильнее написать свой запрос, а не цикл с использованием класса JUser. В случае же с подключением файлов - нет смысла задумываться о производительности, все-равно joomla их несколько десятков подключает, а риск напороть говнокод в погоне за копеечным выиграшем в скорости больше.