Come aggiungere un collegamento Login / Logout nel menu di navigazione principale?


8

Come posso aggiungere un collegamento di accesso al menu "Navigazione principale"?

Quando un utente fa clic sul collegamento, dovrebbe portarlo alla pagina / user / login. Una volta effettuato il login, il link dovrebbe cambiare per dire "Logout" invece di "Login".

C'è un modo per aggiungere un tale collegamento?


Non so quale tema stai usando, ma il tema Bootstrap 3 per drupal 8 fornisce questa funzionalità per impostazione predefinita. Puoi disabilitare la voce Il mio account dal blocco. Quindi la barra di navigazione principale avrà il Login / Logout sul lato destro e Login apparirà solo quando nessuno è loggato e scomparirà quando qualcuno sarà loggato.
CodeNext

Sto usando il tema Bootstrap 3 per Drupal 8. Ho fatto esattamente quello che hai fatto, disabilitando il blocco Il mio account (menu Account utente), ma non c'è nessun collegamento Login / Logout nell'angolo a destra. C'è qualcosa che mi manca?
GTS Joe,

Ho appena pubblicato nella sezione di risposta con l'immagine, quindi possiamo discuterne ulteriormente.
CodeNext

Non è necessario disabilitare l'intero blocco? seguire i passaggi indicati nella risposta.
CodeNext

Risposte:


10

Non è necessario dipendere dal tema Bootstrap o dalle nostre capacità di programmazione per spostare il collegamento " Disconnetti " del sistema su qualsiasi altro menu. Drupal ci permette di farlo facilmente.

modifica Scollega collegamento

passa a un altro menu

Inoltre, possiamo semplicemente creare due collegamenti personalizzati " Accedi qui per favore " e " Fammi uscire da lì " con percorsi relativamente a / user / login e / user / logout . Ciò è meglio perché, diversamente dal collegamento "Disconnetti" del sistema, ci consente di creare tutti i collegamenti di accesso / disconnessione desiderati con attributi personalizzati. Man mano che l'utente accede vedrà solo il link " Disconnetti " e viceversa. L'unica avvertenza è che probabilmente vedrai entrambi i collegamenti insieme perché sei connesso al momento del test dei collegamenti. E questo è normale poiché si dispone dell'autorizzazione " Collegamento a qualsiasi pagina " come amministratore. Disabilita questa autorizzazione e riprova.


4

Per farla breve, crei 2 diverse versioni di menu, una con login, un'altra con logout e assegni a ciascuna versione ruoli di visibilità diversi.

1) Modifica menu e aggiungi il collegamento di logout.

2) Ora tutto ciò che devi fare è configurare il blocco dei collegamenti del menu principale inserisci qui la descrizione dell'immagine

Quindi, in Ruoli, selezionare ☑ Utenti autenticati e anche ☑ Amministratore

inserisci qui la descrizione dell'immagine

3) Ora crea un altro Menu ( /admin/structure/menu) che ha il link "login" e tutti gli altri link di menu che ti servono.

4) Quindi vai ai blocchi ( /admin/structure/block) nel menu principale (supponendo che tu stia usando Bartik, potrebbe avere un nome diverso se stai usando un tema personalizzato) fai clic su Aggiungi e aggiungi il menu che hai appena creato e configuralo. Questa volta per i ruoli, selezionare solo il segno di spunta ☑ Anonimo


Ho dato il tuo suggerimento, ma il blocco di menu personalizzato che creo interrompe gli stili di collegamento (sto usando il tema Bootstrap). Sebbene funzioni in termini di funzionalità, non posso usare questo metodo perché interrompe gli stili nel nuovo blocco di menu.
GTS Joe,

Beh, non mollare. Se la persona che ha creato il tema del boostrap è stata in grado di aggiungere i div del boostrap, anche tu puoi:)
No Sssweat,

3

C'è un modo migliore per farlo. Quello che vuoi fare è creare il tuo plugin ed estendere la classe MenuLinkDefault. Il posto migliore dove cercare è il modulo Drupal / User che fornisce l'implementazione LoginLogoutMenuLink.

Puoi definire il tuo plugin se, ad esempio, vuoi cambiare il testo o la logica. In alternativa, puoi semplicemente puntarlo verso il plug-in esistente per risparmiare tempo e semplicemente inserire l'impianto esistente. Ecco un po 'di codice di esempio:

Versione semplice:

  • Creare my_module/my_module.links.menu.yml

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

Versione avanzata:

  • Copia il plugin nella tua my_module/src/Plugin/Menu/cartella
  • Rinominalo da LoginLogoutMenuLink a MyLoginLogoutMenuLink
  • Aggiorna lo spazio dei nomi per riflettere la tua posizione, ad es namespace Drupal\my_module\Plugin\Menu;
  • Nel file passare class LoginLogoutMenuLink extends MenuLinkDefaultaclass MyLoginLogoutMenuLink extends MenuLinkDefault
  • Crea un my_module.links.menu.ymlcome sopra ma assicurati di nominare la classe come la hai nominata ora e puntarla sul tuo modulo. Vedi esempio sotto.

Il tuo my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.phpdovrebbe guardare come segue:

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

Il tuo my_module/my_module.links.menu.ymldovrebbe guardare come segue:

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

Spero che questo aiuti qualcuno.


2

Puoi farlo con il tema Bootstrap 3 Drupal 8 in quanto tale tema fornisce questa funzionalità per impostazione predefinita. Sto pubblicando l'immagine del mio sito di prova di drupal 8. Uno con la pagina di accesso e uno con la pagina di logout.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Stai cercando questo genere di cose?

Seguire i seguenti passi.

1. Vai su Strutture> Blocchi. E assicurati della seguente configurazione nella sezione Navigazione.

inserisci qui la descrizione dell'immagine

2. Vai a Strutture> Menu> Menu Account utente e disabilita il mio account, come mostrato nella seguente immagine.

inserisci qui la descrizione dell'immagine

Quindi, il menu di navigazione principale dovrebbe mostrare solo Login e Logout, come ho pubblicato nella prima coppia di immagini.


Lo stavi cercando? ha funzionato?
CodeNext

1

Se usi il sottotema Bootstrap puoi modificare questo codice per soddisfare le tue esigenze:

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

Inserisci questo codice in page.tpl.php nel sottotema / template / all'interno del blocco, dove devi:

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

L'ho inserito dopo la linea 90, nel qual caso non collassa su un dispositivo mobile, se è necessario che venga piegato dopo:

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

1

A livello di programmazione, è possibile farlo tramite il .links.menu.ymlfile del proprio modulo . Di seguito vengono inseriti questi collegamenti nel menu "Principale":

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

Poiché il "route_name" che ciascuno di questi chiama chiama già specifica il requisito di accesso / disconnessione (consultare https://api.drupal.org/api/drupal/core%21modules%21user%21user.routing.yml/8.4.x ), i collegamenti verranno visualizzati in base allo stato di accesso.


Non funziona, mostra ancora entrambi i collegamenti
No Sssweat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.