Изменение пункта меню после того, как пользователь залогинился

Тема в разделе "Проектирование", создана пользователем tohas, 02.06.2010.

  1. tohas
    Offline

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

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Здравствуйте, коллеги.

    У меня в меню есть пункт "Войти", который ведёт на страничку с формой логина. Хотелось бы, чтобы после того, как пользователь вошёл, надпись заменялась на слово "Выйти", и ссылка вела, соответственно, на скрипт разлогина.

    Дальше. При использовании стандартного компонента Login мне, чтобы разлогиниться, приходится лишний раз жать на кнопку Log Out на отдельной страничке. Как сделать так, чтобы пользователь нажимал на ссылку "Выйти" в меню, после этого его сессия заканчивалась без лишних вопросов, а браузер редиректился назад на ту страничку, где был?

    Спасибо.
     
  2.  
  3. Kadavr
    Offline

    Kadavr специалист

    Регистрация:
    18.10.2007
    Сообщения:
    557
    Симпатии:
    39
    Пол:
    Мужской
    На какой такой отдельной страничке? Делайте вход не пунктом меню, а опубликованным модулем входа и все будет так, как вам надо.
     
  4. tohas
    Offline

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

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Понимаете, мне не нужно, чтобы на каждой странице висела форма логина. Она у меня на отдельной странице, на которую ссылается отдельный пункт меню.
     
  5. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Засунь в Index.php шаблона куда нибудь в header вот это
    Код (PHP):
    1. <?php
    2. $id = '2';
    3. $name = JText::_('Login');
    4. $rename = JText::_('Logout');
    5. $mn = & JSite::getMenu();
    6. $it =$mn->getItem($id);
    7. $user = JFactory::getUser();
    8. if ($user->id){
    9. $it->name = $rename;
    10. }else{
    11. $it->name = $name;
    12. }
    13. ?>

    В первой строчке $id это Itemid пункта меню, посмотришь у себя в меню и поставишь свой.
     
    tohas нравится это.
  6. tohas
    Offline

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

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Muchas gracias, botanist! Это именно то, что мне надо.

    Остался второй вопрос: как убрать страничку с Log Out вообще, чтобы Log Out происходил сразу при нажатии на пункт меню?
     
  7. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Код (PHP):
    1. <?php
    2. $id = '2';
    3. $name = JText::_('Login');
    4. $rename = JText::_('Logout');
    5. $mn = & JSite::getMenu();
    6. $it =$mn->getItem($id);
    7. $user = JFactory::getUser();
    8. if ($user->id){
    9. $uri =& JURI::getInstance();
    10. $link = base64_encode( '/index.php?'.$uri->getQuery());
    11. $it->name = $rename;
    12. $it->link = 'index.php?option=com_user&task=logout&return='.$link;
    13. }else{
    14. $it->name = $name;
    15. }
    16. ?>
     
  8. tohas
    Offline

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

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо, botanist. Я понял идею: нужно сделать так, чтобы при клике на пункт меню происходил не вызов компонента, а вызов функции logout с параметром return, содержащим url страницы, на которой был сделан клик. Правильно?

    Возникло 2 проблемы. Первая - при клике всё равно вызывается компонент. Пришлось добавить строчку:
    Код (PHP):
    1. $it->type = 'url';

    Теперь разлогин происходит нормально. Но почему-то не работает редирект. С какой бы страницы я не делал разлогин, joomla перенаправляет меня на адрес /index.php?

    Что тут не так?
     
  9. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    SEF включен?
     
  10. tohas
    Offline

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

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Да, включен
     
  11. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Тогда как-то так. Не проверял, но должно работать
    Код (PHP):
    1. $id = '2';
    2. $name = JText::_('Login');
    3. $rename = JText::_('Logout');
    4. $mn = & JSite::getMenu();
    5. $it =$mn->getItem($id);
    6. $user = JFactory::getUser();
    7. if ($user->id){
    8. $uri =& JURI::getInstance();
    9. $conf = JFactory::getConfig();
    10. $sef = $conf->getValue('sef');
    11.     If ($sef){
    12.     $link = base64_encode( JRoute::_($uri->getPath  () ));
    13.     }else{
    14.     $link = base64_encode( '/index.php?'.$uri->getQuery());
    15.     }
    16. $it->name = $rename;
    17. $it->link = JRoute::_('index.php?option=com_user&task=logout&return='.$link);
    18. }else{
    19. $it->name = $name;
    20. }
     
    DKraev нравится это.
  12. tohas
    Offline

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

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Работает, всё отлично. Редиректит после разлогина. А к логину можно такое же поведение прикрутить? Чтобы при входе редиректил на ту же страничку, на которой была кликнута ссылка "войти"?
     
  13. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Угу. И обнаружили вы это только через месяц. Молодец. Подождем еще пару месяцев и найдем решение следующей задачи. Если настроение будет.
     
  14. tohas
    Offline

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

    Регистрация:
    02.06.2010
    Сообщения:
    23
    Симпатии:
    0
    Пол:
    Мужской
    Непонятно, почему вы обижаетесь. Проверил, как только дошли руки.
     

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

Загрузка...