Wie füge ich einen Login / Logout-Link im Hauptnavigationsmenü hinzu?

8

Wie kann ich einen Login-Link zum Menü "Hauptnavigation" hinzufügen?

Wenn ein Benutzer auf den Link klickt, sollte er zur Seite / user / login gelangen. Sobald sie sich angemeldet haben, sollte sich der Link ändern und "Abmelden" anstelle von "Anmelden" sagen.

Gibt es eine Möglichkeit, einen solchen Link hinzuzufügen?

GTS Joe
quelle
Ich weiß nicht, welches Thema Sie verwenden, aber das Bootstrap 3-Thema für Drupal 8 bietet diese Funktion standardmäßig. Sie können das Element Mein Konto im Block deaktivieren. Die Hauptnavigationsleiste hat also das Login / Logout auf der rechten Seite und Login wird nur
angezeigt,
Ich verwende das Bootstrap 3-Design für Drupal 8. Ich habe genau das getan, was Sie getan haben. Deaktivieren Sie den Block Mein Konto (Menü Benutzerkonto), aber in der rechten Ecke befindet sich kein Link zum Anmelden / Abmelden. Fehlt mir etwas?
GTS Joe
Ich habe gerade im Antwortbereich mit Bild gepostet, damit wir darüber weiter diskutieren können.
CodeNext
Sie müssen nicht den gesamten Block deaktivieren? Befolgen Sie die Schritte mit, die ich in der Antwort erwähnt habe.
CodeNext

Antworten:

10

Wir müssen uns nicht auf das Bootstrap-Thema oder unsere Programmierkenntnisse verlassen, um den Link " Abmelden " des Systems in ein anderes Menü zu verschieben. Drupal ermöglicht es uns, es einfach zu machen.

Link Abmelden bearbeiten

Bewegen Sie sich in ein anderes Menü

Zusätzlich können wir einfach zwei benutzerdefinierte Links " Melde mich hier bitte an " und " Bring mich da raus " mit den Pfaden / user / login und / user / logout relativ erstellen . Dies ist besser, da wir im Gegensatz zum System-Link "Abmelden" beliebig viele Anmelde- / Abmeldelinks mit benutzerdefinierten Attributen erstellen können. Wenn sich der Benutzer angemeldet hat, wird nur der Link " Abmelden " angezeigt und umgekehrt. Die einzige Einschränkung ist, dass Sie wahrscheinlich beide Links zusammen sehen, da Sie zum Zeitpunkt des Testens der Links angemeldet sind. Dies ist normal, da Sie als Administrator die Berechtigung "Zu einer beliebigen Seite verlinken " haben. Deaktivieren Sie diese Berechtigung und versuchen Sie es erneut.

Drugan
quelle
4

Kurz gesagt, Sie erstellen zwei verschiedene Menüversionen, eine mit Anmeldung und eine mit Abmeldung, und geben jeder Version unterschiedliche Sichtbarkeitsrollen.

1) Bearbeiten Sie das Menü und fügen Sie den Abmeldelink hinzu.

2) Jetzt müssen Sie nur noch Ihren Hauptmenü- Linkblock konfigurierenGeben Sie hier die Bildbeschreibung ein

Aktivieren Sie dann in Rollen das Kontrollkästchen ☑ Authentifizierte Benutzer und ☑ Administrator

Geben Sie hier die Bildbeschreibung ein

3) Erstellen Sie nun ein weiteres Menü ( /admin/structure/menu) mit dem Link "Login" und allen anderen benötigten Menü-Links.

4) Gehen Sie dann zu Blöcke ( /admin/structure/block) im Hauptmenü (vorausgesetzt, Sie verwenden Bartik und haben möglicherweise einen anderen Namen, wenn Sie ein benutzerdefiniertes Thema verwenden). Klicken Sie auf Hinzufügen, und fügen Sie das gerade erstellte Menü hinzu und konfigurieren Sie es. Dieses Mal für Rollen nur das Häkchen ☑ Anonym setzen

Kein Sssweat
quelle
Ich habe Ihren Vorschlag gemacht, aber der von mir erstellte benutzerdefinierte Menüblock unterbricht die Linkstile (ich verwende das Bootstrap-Thema). Obwohl es funktional funktioniert, kann ich diese Methode nicht verwenden, da sie die Stile im neuen Menüblock unterbricht.
GTS Joe
Gib nicht auf. Wenn die Person, die das Boostrap-Thema erstellt hat, die Boostrap-Divs hinzufügen konnte, können Sie dies auch:)
No Sssweat
3

Es gibt einen besseren Weg, dies zu tun. Sie möchten ein eigenes Plugin erstellen und die MenuLinkDefault-Klasse erweitern. Der beste Ort, um nachzuschauen, ist das Drupal / User-Modul, das die LoginLogoutMenuLink-Implementierung bereitstellt.

Sie können entweder Ihr eigenes Plugin definieren, wenn Sie beispielsweise den Text oder die Logik ändern möchten. Alternativ können Sie es einfach auf das vorhandene Plugin verweisen, um Zeit zu sparen und einfach das vorhandene Implmee zu platzieren. Hier ist ein Beispielcode:

Einfache Version:

  • Erstellen my_module/my_module.links.menu.yml

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

Erweiterte Version:

  • Kopieren Sie das Plugin in Ihren my_module/src/Plugin/Menu/Ordner
  • Benennen Sie es von LoginLogoutMenuLink in MyLoginLogoutMenuLink um
  • Aktualisieren Sie den Namespace, um Ihren Standort wiederzugeben, z namespace Drupal\my_module\Plugin\Menu;
  • In der Datei ändern Sie class LoginLogoutMenuLink extends MenuLinkDefaultzuclass MyLoginLogoutMenuLink extends MenuLinkDefault
  • Erstellen Sie eine my_module.links.menu.ymlwie oben beschrieben, aber stellen Sie sicher, dass Sie die Klasse so benennen, wie Sie sie jetzt benannt haben, und zeigen Sie auf Ihr Modul. Siehe Beispiel unten.

Sie my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.phpsollten wie folgt aussehen:

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

Sie my_module/my_module.links.menu.ymlsollten wie folgt aussehen:

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

Ich hoffe das hilft jemandem.

JNP Web Developer
quelle
2

Sie können dies mit dem Bootstrap 3 Drupal 8- Design tun, da dieses Design diese Funktion standardmäßig bereitstellt. Ich poste das Bild meiner Drupal 8-Testversion. Eine mit Anmeldeseite und eine mit Abmeldeseite.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Suchst du so etwas?

Befolgen Sie die folgenden Schritte.

1. Gehen Sie zu Strukturen> Blöcke. Stellen Sie im Abschnitt Navigation die folgende Konfiguration sicher.

Geben Sie hier die Bildbeschreibung ein

2. Gehen Sie zu Strukturen> Menüs> Menü Benutzerkonto und deaktivieren Sie Mein Konto, wie in der folgenden Abbildung gezeigt.

Geben Sie hier die Bildbeschreibung ein

In Ihrem Hauptnavigationsmenü sollten also nur Anmelden und Abmelden angezeigt werden, wie ich im ersten Bildpaar angegeben habe.

CodeNext
quelle
Hast du danach gesucht? hat es funktioniert?
CodeNext
1

Wenn Sie das Bootstrap-Unterthema verwenden, können Sie diesen Code an Ihre Anforderungen anpassen:

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

Fügen Sie diesen Code in page.tpl.php im Unterthema / templates / innerhalb des Blocks ein, wo Sie Folgendes benötigen:

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

Ich setze es nach der 90-Zeile, in welchem ​​Fall es auf einem mobilen Gerät nicht zusammenbricht, wenn es notwendig ist, dass es nach dem Zusammenlegen gefaltet wird:

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

Programmgesteuert können Sie dies über die .links.menu.ymlDatei Ihres eigenen Moduls erreichen . Im Folgenden werden diese Links in das Hauptmenü eingefügt:

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

Da der "Routenname", den jeder von diesen aufruft, bereits die Anmelde- / Abmeldeanforderung angibt (siehe https://api.drupal.org/api/drupal/core%21modules%21user%21user.routing.yml/8.4.x ) werden die Links je nach Anmeldestatus angezeigt.

markfullmer
quelle
Funktioniert nicht, zeigt immer noch beide Links
No Sssweat