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

Discussion in 'Проектирование' started by tohas, Jun 2, 2010.

  1. tohas
    Offline

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

    Joined:
    Jun 2, 2010
    Messages:
    23
    Likes Received:
    0
    Gender:
    Male
    Здравствуйте, коллеги.

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

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

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

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

    Joined:
    Oct 18, 2007
    Messages:
    557
    Likes Received:
    39
    Gender:
    Male
    На какой такой отдельной страничке? Делайте вход не пунктом меню, а опубликованным модулем входа и все будет так, как вам надо.
     
  4. tohas
    Offline

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

    Joined:
    Jun 2, 2010
    Messages:
    23
    Likes Received:
    0
    Gender:
    Male
    Понимаете, мне не нужно, чтобы на каждой странице висела форма логина. Она у меня на отдельной странице, на которую ссылается отдельный пункт меню.
     
  5. Offline

    botanist Активист => Cпециалист <=

    Joined:
    Feb 15, 2009
    Messages:
    461
    Likes Received:
    49
    Gender:
    Male
    Засунь в 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 likes this.
  6. tohas
    Offline

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

    Joined:
    Jun 2, 2010
    Messages:
    23
    Likes Received:
    0
    Gender:
    Male
    Muchas gracias, botanist! Это именно то, что мне надо.

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

    botanist Активист => Cпециалист <=

    Joined:
    Feb 15, 2009
    Messages:
    461
    Likes Received:
    49
    Gender:
    Male
    Код (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 Недавно здесь

    Joined:
    Jun 2, 2010
    Messages:
    23
    Likes Received:
    0
    Gender:
    Male
    Спасибо, botanist. Я понял идею: нужно сделать так, чтобы при клике на пункт меню происходил не вызов компонента, а вызов функции logout с параметром return, содержащим url страницы, на которой был сделан клик. Правильно?

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

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

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

    botanist Активист => Cпециалист <=

    Joined:
    Feb 15, 2009
    Messages:
    461
    Likes Received:
    49
    Gender:
    Male
    SEF включен?
     
  10. tohas
    Offline

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

    Joined:
    Jun 2, 2010
    Messages:
    23
    Likes Received:
    0
    Gender:
    Male
    Да, включен
     
  11. Offline

    botanist Активист => Cпециалист <=

    Joined:
    Feb 15, 2009
    Messages:
    461
    Likes Received:
    49
    Gender:
    Male
    Тогда как-то так. Не проверял, но должно работать
    Код (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 likes this.
  12. tohas
    Offline

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

    Joined:
    Jun 2, 2010
    Messages:
    23
    Likes Received:
    0
    Gender:
    Male
    Работает, всё отлично. Редиректит после разлогина. А к логину можно такое же поведение прикрутить? Чтобы при входе редиректил на ту же страничку, на которой была кликнута ссылка "войти"?
     
  13. Offline

    botanist Активист => Cпециалист <=

    Joined:
    Feb 15, 2009
    Messages:
    461
    Likes Received:
    49
    Gender:
    Male
    Угу. И обнаружили вы это только через месяц. Молодец. Подождем еще пару месяцев и найдем решение следующей задачи. Если настроение будет.
     
  14. tohas
    Offline

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

    Joined:
    Jun 2, 2010
    Messages:
    23
    Likes Received:
    0
    Gender:
    Male
    Непонятно, почему вы обижаетесь. Проверил, как только дошли руки.
     

Share This Page

Loading...