Как добавить ссылку Вход / Выход из системы в главном меню навигации?

8

Как добавить ссылку для входа в меню «Главное меню»?

Когда пользователь нажимает на ссылку, он должен перейти на страницу / user / login. После входа в систему ссылка должна измениться на «Выход» вместо «Вход».

Есть ли способ добавить такую ​​ссылку?

GTS Джо
источник
Я не знаю, какую тему вы используете, но тема Bootstrap 3 для drupal 8 предоставляет эту функцию по умолчанию. Вы можете отключить пункт Моя учетная запись из блока. Таким образом, главная панель навигации будет иметь логин / выход из системы с правой стороны, а логин появится только тогда, когда никто не вошел в систему, и исчезнет, ​​когда кто-либо вошел в систему.
CodeNext
Я использую тему Bootstrap 3 для Drupal 8. Я сделал то же, что и вы, отключив блок «Моя учетная запись» (меню «Учетная запись пользователя»), но в правом углу нет ссылки «Вход / Выход из системы». Я что-то упускаю?
GTS Джо
Я только что опубликовал в разделе ответов с изображением, чтобы мы могли обсудить это дальше.
CodeNext
Вам не нужно отключать весь блок? выполните шаги, о которых я упоминал в ответе.
CodeNext

Ответы:

10

Нам не нужно зависеть от темы Bootstrap или наших навыков программирования, чтобы перемещать ссылку « Выход из системы » в любом другом меню. Drupal позволяет нам сделать это легко.

редактировать ссылку выхода

перейти в другое меню

Кроме того, мы можем просто создать две пользовательские ссылки « Войдите, пожалуйста, здесь » и « Вывести меня оттуда », соответственно, с путями / user / login и / user / logout . Это лучше, потому что, в отличие от системной ссылки «Выйти», она дает нам возможность создавать столько ссылок входа / выхода, сколько мы хотим с пользовательскими атрибутами. Когда пользователь войдет в систему, он увидит только ссылку « Выйти » и наоборот. Единственное предостережение в том, что вы, вероятно, увидите обе ссылки вместе, потому что вы вошли в систему во время тестирования ссылок. И это нормально, поскольку у вас есть разрешение « Ссылка на любую страницу » в качестве администратора. Отключите это разрешение и попробуйте снова.

друган
источник
4

Короче говоря, вы создаете 2 разные версии Меню, одну с логином, другую с выходом из системы и назначаете каждой версии разные роли видимости.

1) Редактировать меню и добавить ссылку выхода из системы.

2) Теперь все, что вам нужно сделать, это настроить блок ссылок главного меню введите описание изображения здесь

Затем в ролях установите флажок mark Аутентифицированные пользователи, а также ☑ Администратор.

введите описание изображения здесь

3) Теперь создайте другое Меню ( /admin/structure/menu), которое имеет ссылку «логин» и все другие необходимые вам ссылки меню.

4) Затем перейдите к blocks ( /admin/structure/block) в основном меню (при условии, что вы используете Bartik, у вас может быть другое имя, если вы используете собственную тему), нажмите кнопку Добавить, добавьте только что созданное меню и настройте его. На этот раз для ролей, только галочка ☑ Аноним

Нет Sssweat
источник
Я сделал ваше предложение, но созданный пользователем блок меню нарушает стили ссылок (я использую тему Bootstrap). Хотя он работает по функциональности, я не могу использовать этот метод, потому что он нарушает стили в новом блоке меню.
GTS Джо
Ну, не сдавайся. Если человек, создавший тему boostrap, смог добавить к ней div-элементы boostrap, вы тоже можете:)
No Sssweat
3

Есть лучший способ сделать это. Что вы хотите сделать, это создать свой собственный плагин и расширить класс MenuLinkDefault. Лучшее место для поиска - модуль Drupal / User, который обеспечивает реализацию LoginLogoutMenuLink.

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

Простая версия:

  • Создайте my_module/my_module.links.menu.yml

    my_module.logout:
      weight: 10
      menu_name: my-custom-menu
      class: Drupal\user\Plugin\Menu\LoginLogoutMenuLink

Продвинутая версия:

  • Скопируйте плагин в вашу my_module/src/Plugin/Menu/папку
  • Переименуйте его из LoginLogoutMenuLink в MyLoginLogoutMenuLink
  • Обновите пространство имен, чтобы отразить ваше местоположение, например namespace Drupal\my_module\Plugin\Menu;
  • В файле изменить class LoginLogoutMenuLink extends MenuLinkDefaultнаclass MyLoginLogoutMenuLink extends MenuLinkDefault
  • Создайте, my_module.links.menu.ymlкак указано выше, но убедитесь, что вы называете класс так, как вы его назвали, и указываете его на свой модуль. Смотрите пример ниже.

Вы my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.phpдолжны выглядеть следующим образом:

namespace Drupal\my_module\Plugin\Menu;

use Drupal\Core\Menu\MenuLinkDefault;
use Drupal\Core\Menu\StaticMenuLinkOverridesInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * A menu link that shows "Log in" or "Log out" as appropriate.
 */
class MyLoginLogoutMenuLink extends MenuLinkDefault {
...

Вы my_module/my_module.links.menu.ymlдолжны выглядеть следующим образом:

my_module.logout:
  weight: 10
  menu_name: my-custom-menu
  class: Drupal\my_module\Plugin\Menu\MyLoginLogoutMenuLink

Я надеюсь, что это помогает кому-то.

Веб-разработчик JNP
источник
2

Вы можете сделать это с помощью темы Bootstrap 3 Drupal 8, так как эта тема предоставляет эту функцию по умолчанию. Я публикую изображение моего сайта Drupal 8. Один со страницей входа, а другой со страницей выхода.

введите описание изображения здесь

введите описание изображения здесь

Вы ищете такие вещи?

Выполните следующие шаги.

1. Перейдите в Структуры> Блоки. И убедитесь, что следующая конфигурация в разделе навигации.

введите описание изображения здесь

2. Перейдите в Структуры> Меню> Меню учетной записи пользователя и отключите Моя учетная запись, как показано на следующем рисунке.

введите описание изображения здесь

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

CodeNext
источник
Вы искали это? это сработало?
CodeNext
1

Если вы используете подтему Bootstrap, вы можете изменить этот код в соответствии со своими потребностями:

<?php global $user; if ($user->uid): ?>   
    <a href="/user/logout" type="button" class="navbar-brand" role="button">Logout</a>
<?php endif; ?>    

<?php global $user; if (!$user->uid): ?>   
    <a href="/user" type="button" class="navbar-brand" role="button">Login</a>
<?php endif; ?>    

Поместите этот код в page.tpl.php в подтеме / templates / внутри блока, где вам нужно:

< div class="navbar-header"> ... < /div>

Я поставил его после 90-й строки, в этом случае он не сворачивается на мобильном устройстве, если необходимо, чтобы он был сложен после:

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
makbuk
источник
1

Программно, вы можете сделать это через файл вашего собственного модуля .links.menu.yml. Следующие ссылки размещают в главном меню:

mymodule.sign_in:
  title: 'Sign in'
  parent: system.menu.main
  description: 'Sign in'
  route_name: user.login
  weight: 100
  menu_name: main

mymodule.sign_out:
  title: 'Sign out'
  parent: system.menu.main
  description: 'Sign out'
  route_name: user.logout
  weight: 101
  menu_name: main

Поскольку "имя_путешествия", которое вызывает каждый из них, уже указывает требование входа / выхода (см. Https://api.drupal.org/api/drupal/core%21modules%21user%21user.routing.yml/8.4.x ), ссылки будут отображаться в зависимости от статуса входа.

markfullmer
источник
Не работает, по-прежнему показывает обе ссылки
Нет Sssweat