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?
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.
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.
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
Ensuite, dans Rôles, cochez users Utilisateurs authentifiés et également ☑ Administrateur
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
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:
my_module/src/Plugin/Menu/
dossiernamespace Drupal\my_module\Plugin\Menu;
class LoginLogoutMenuLink extends MenuLinkDefault
à class MyLoginLogoutMenuLink extends MenuLinkDefault
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.
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.
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.
2. Allez dans Structures> Menus> Menu Compte utilisateur et désactivez Mon compte, comme indiqué dans l'image suivante.
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.
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">
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.