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

8

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?

GTS Joe
la source
Je ne sais pas quel thème vous utilisez, mais le thème Bootstrap 3 pour drupal 8 fournit cette fonctionnalité par défaut. Vous pouvez désactiver l'élément Mon compte du bloc. Ainsi, la barre de navigation principale aura la connexion / déconnexion à droite et la connexion n'apparaîtra que lorsque personne n'est connecté et elle disparaîtra lorsque quelqu'un sera connecté.
CodeNext
J'utilise le thème Bootstrap 3 pour Drupal 8. J'ai fait exactement ce que vous avez fait, désactivez le bloc Mon compte (menu Compte utilisateur), mais il n'y a pas de lien Connexion / Déconnexion dans le coin droit. Y a-t-il quelque chose qui me manque?
GTS Joe
Je viens de poster dans la section des réponses avec une image, afin que nous puissions en discuter davantage.
CodeNext
Vous ne devez pas désactiver le bloc entier? suivez les étapes que j'ai mentionnées dans la réponse.
CodeNext

Réponses:

10

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

modifier le lien de déconnexion

passer à un autre menu

De plus, nous pouvons simplement créer deux liens personnalisés " Connectez-vous ici s'il vous plaît " et " Sortez-moi de là " avec les chemins / user / login et / user / logout relativement. C'est mieux parce que 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 cela est normal car vous avez l' autorisation " Lien vers n'importe quelle page " en tant qu'administrateur. Désactivez cette autorisation et réessayez.

drugan
la source
4

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 le bloc de liens de votre menu principal entrez la description de l'image ici

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

entrez la description de l'image ici

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) Ensuite, allez dans les blocs ( /admin/structure/block) du menu principal (en supposant que vous utilisez Bartik, peut avoir un nom différent si vous utilisez un thème personnalisé) cliquez sur ajouter, ajoutez le menu que vous venez de créer et configurez-le. Cette fois pour les rôles, cochez uniquement ☑ Anonyme

Pas de sueur
la source
J'ai fait votre suggestion, mais le bloc de menu personnalisé que je crée rompt les styles de lien (j'utilise le thème Bootstrap). Bien que cela fonctionne en termes de fonctionnalités, je ne peux pas utiliser cette méthode car elle casse les styles dans le nouveau bloc de menu.
GTS Joe
Eh bien n'abandonnez pas. Si la personne qui a créé le thème boostrap a pu y ajouter les divs boostrap, vous aussi:)
No Sssweat
3

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, passez class LoginLogoutMenuLink extends MenuLinkDefaultàclass MyLoginLogoutMenuLink extends MenuLinkDefault
  • Créez un my_module.links.menu.ymlcomme ci-dessus mais assurez-vous de nommer la classe comme vous l'avez nommée maintenant et pointez-la vers votre module. Voir l'exemple ci-dessous.

Votre my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.phpdevrait 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.ymldevrait 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.

Développeur Web JNP
la source
2

Vous pouvez le faire avec le thème Bootstrap 3 Drupal 8 car ce thème fournit cette fonctionnalité par défaut. Je poste l'image de mon site d'essai drupal 8. L'un avec la page de connexion et l'autre avec la page de déconnexion.

entrez la description de l'image ici

entrez la description de l'image ici

Cherchez-vous ce genre de chose?

Suivez les étapes suivantes.

1. Accédez à Structures> Blocs. Et assurez-vous que la configuration suivante dans la section Navigation.

entrez la description de l'image ici

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

entrez la description de l'image ici

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.

CodeNext
la source
Recherchez-vous cela? ça a marché?
CodeNext
1

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">
makbuk
la source
1

Par programme, vous pouvez le faire via le .links.menu.ymlfichier 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.

markfullmer
la source
Ne fonctionne pas, affiche toujours les deux liens
No Sssweat