Здравствуйте, коллеги. У меня в меню есть пункт "Войти", который ведёт на страничку с формой логина. Хотелось бы, чтобы после того, как пользователь вошёл, надпись заменялась на слово "Выйти", и ссылка вела, соответственно, на скрипт разлогина. Дальше. При использовании стандартного компонента Login мне, чтобы разлогиниться, приходится лишний раз жать на кнопку Log Out на отдельной страничке. Как сделать так, чтобы пользователь нажимал на ссылку "Выйти" в меню, после этого его сессия заканчивалась без лишних вопросов, а браузер редиректился назад на ту страничку, где был? Спасибо.
На какой такой отдельной страничке? Делайте вход не пунктом меню, а опубликованным модулем входа и все будет так, как вам надо.
Понимаете, мне не нужно, чтобы на каждой странице висела форма логина. Она у меня на отдельной странице, на которую ссылается отдельный пункт меню.
Засунь в Index.php шаблона куда нибудь в header вот это Код (PHP): <?php $id = '2'; $name = JText::_('Login'); $rename = JText::_('Logout'); $mn = & JSite::getMenu(); $it =$mn->getItem($id); $user = JFactory::getUser(); if ($user->id){ $it->name = $rename; }else{ $it->name = $name; } ?> В первой строчке $id это Itemid пункта меню, посмотришь у себя в меню и поставишь свой.
Muchas gracias, botanist! Это именно то, что мне надо. Остался второй вопрос: как убрать страничку с Log Out вообще, чтобы Log Out происходил сразу при нажатии на пункт меню?
Код (PHP): <?php $id = '2'; $name = JText::_('Login'); $rename = JText::_('Logout'); $mn = & JSite::getMenu(); $it =$mn->getItem($id); $user = JFactory::getUser(); if ($user->id){ $uri =& JURI::getInstance(); $link = base64_encode( '/index.php?'.$uri->getQuery()); $it->name = $rename; $it->link = 'index.php?option=com_user&task=logout&return='.$link; }else{ $it->name = $name; } ?>
Спасибо, botanist. Я понял идею: нужно сделать так, чтобы при клике на пункт меню происходил не вызов компонента, а вызов функции logout с параметром return, содержащим url страницы, на которой был сделан клик. Правильно? Возникло 2 проблемы. Первая - при клике всё равно вызывается компонент. Пришлось добавить строчку: Код (PHP): $it->type = 'url'; Теперь разлогин происходит нормально. Но почему-то не работает редирект. С какой бы страницы я не делал разлогин, joomla перенаправляет меня на адрес /index.php? Что тут не так?
Тогда как-то так. Не проверял, но должно работать Код (PHP): $id = '2'; $name = JText::_('Login'); $rename = JText::_('Logout'); $mn = & JSite::getMenu(); $it =$mn->getItem($id); $user = JFactory::getUser(); if ($user->id){ $uri =& JURI::getInstance(); $conf = JFactory::getConfig(); $sef = $conf->getValue('sef'); If ($sef){ $link = base64_encode( JRoute::_($uri->getPath () )); }else{ $link = base64_encode( '/index.php?'.$uri->getQuery()); } $it->name = $rename; $it->link = JRoute::_('index.php?option=com_user&task=logout&return='.$link); }else{ $it->name = $name; }
Работает, всё отлично. Редиректит после разлогина. А к логину можно такое же поведение прикрутить? Чтобы при входе редиректил на ту же страничку, на которой была кликнута ссылка "войти"?
Угу. И обнаружили вы это только через месяц. Молодец. Подождем еще пару месяцев и найдем решение следующей задачи. Если настроение будет.