web-dev-qa-db-fra.com

Comment ajouter un lien de connexion / déconnexion dans le menu de navigation principal?

Comment ajouter un lien de connexion au menu "Navigation principale"?

Lorsqu'un utilisateur clique sur le lien, il doit le diriger vers la page/user/login. Une fois connecté, le lien devrait changer pour dire "Déconnexion" au lieu de "Connexion".

Existe-t-il un moyen d'ajouter un tel lien?

8
GTS Joe

Nous n'avons pas besoin de dépendre du lien Bootstrap ou de nos compétences en programmation pour déplacer le système " Déconnectez-vous" sur tout autre menu. Drupal nous permet de le faire facilement.

edit Log out link

move on another menu

De plus, nous pouvons simplement créer deux liens personnalisés " Connectez-moi ici s'il vous plaît" et " Sortez-moi de là" avec /user/login et /user/logout relativement. C'est mieux car contrairement au lien "Déconnexion" du système, il nous permet de créer autant de liens de connexion/déconnexion que nous voulons avec des attributs personnalisés. Lorsque l'utilisateur s'est connecté, il ne verra que le lien " Déconnexion" et vice versa. La seule mise en garde est que vous verrez probablement les deux liens ensemble car vous êtes connecté au moment de tester les liens. Et c'est normal car vous avez l'autorisation " Lien vers n'importe quelle page" en tant qu'administrateur. Désactivez cette autorisation et réessayez.

10
drugan

Pour faire court, vous créez 2 versions de menu différentes, une avec connexion, une autre avec déconnexion, et donnez à chaque version des rôles de visibilité différents.

1) Menu Édition , et ajoutez le lien de déconnexion.

2) Il ne vous reste plus qu'à configurer votre bloc de liens du menu principal enter image description here

Ensuite, dans Rôles, cochez users Utilisateurs authentifiés et également ☑ Administrateur

enter image description here

3) Maintenant, créez un autre menu (/admin/structure/menu) qui a le lien "login" et tous les autres liens de menu dont vous avez besoin.

4) Allez ensuite dans les blocs (/admin/structure/block) dans Menu principal (En supposant que vous utilisez Bartik, peut avoir un nom différent si vous utilisez un thème personnalisé) cliquez sur ajouter, et ajoutez le menu que vous venez de créer et configurez-le. Cette fois pour les rôles, cochez uniquement ☑ Anonyme

4
No Sssweat

Il existe une meilleure façon de procéder. Ce que vous voulez faire, c'est créer votre propre plugin et étendre la classe MenuLinkDefault. Le meilleur endroit à regarder est le module Drupal/User qui fournit l'implémentation LoginLogoutMenuLink.

Vous pouvez soit définir votre propre plugin si vous voulez par exemple changer le texte ou la logique. Alternativement, vous pouvez simplement le pointer vers le plugin existant pour gagner du temps et simplement mettre l'implément existant. Voici un exemple de code:

Version simple:

  • Créer my_module/my_module.links.menu.yml

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

Version avancée:

  • Copiez le plugin dans votre my_module/src/Plugin/Menu/ dossier
  • Renommez-le de LoginLogoutMenuLink en MyLoginLogoutMenuLink
  • Mettez à jour l'espace de noms pour refléter votre emplacement, par exemple namespace Drupal\my_module\Plugin\Menu;
  • Dans le fichier, changez class LoginLogoutMenuLink extends MenuLinkDefault à class MyLoginLogoutMenuLink extends MenuLinkDefault
  • Créer un my_module.links.menu.yml comme ci-dessus mais assurez-vous de nommer la classe comme vous l'avez nommée maintenant et de la diriger vers votre module. Voir l'exemple ci-dessous.

Votre my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.php devrait ressembler à ceci:

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 {
...

Votre my_module/my_module.links.menu.yml devrait ressembler à ceci:

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

J'espère que ça aidera quelqu'un.

3
JNP Web Developer

Vous pouvez le faire avec Bootstrap Drupal 8 theme car ce thème fournit cette fonctionnalité par défaut. Je publie l'image de mon drupal Site d'essai 8. Un avec la page de connexion et l'autre avec la page de déconnexion.

enter image description here

enter image description here

Cherchez-vous ce genre de chose?

Suivez les étapes suivantes.

1. Allez dans Structures> Blocs. Et assurez-vous que la configuration suivante dans la section Navigation.

enter image description here

2. Allez dans Structures> Menus> Menu Compte utilisateur et désactivez Mon compte, comme indiqué dans l'image suivante.

enter image description here

Ainsi, votre menu de navigation principal devrait afficher uniquement la connexion et la déconnexion, comme je l'ai publié dans la première paire d'images.

2
CodeNext

Si vous utilisez le sous-thème Bootstrap, vous pouvez modifier ce code pour répondre à vos besoins:

<?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; ?>    

Mettez ce code dans page.tpl.php dans le sous-thème/templates/à l'intérieur du bloc, où vous devez:

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

Je le mets après la ligne 90, auquel cas il ne s'effondre pas sur un appareil mobile, s'il faut qu'il soit replié après:

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
1
makbuk

Par programme, vous pouvez le faire via le fichier .links.menu.yml De votre propre module. Les éléments suivants placent ces liens dans le menu "Principal":

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

Étant donné que le "nom_route" que chacun d'eux appelle déjà spécifie l'exigence de connexion/déconnexion (voir https://api.drupal.org/api/drupal/core%21modules%21user%21user.routing.yml /8.4.x ), les liens s'afficheront en fonction de l'état de connexion.

1
markfullmer