¿Cómo agregar un enlace Iniciar sesión / Cerrar sesión en el menú de navegación principal?

8

¿Cómo puedo agregar un enlace de inicio de sesión al menú "Navegación principal"?

Cuando un usuario hace clic en el enlace, debe llevarlo a la página / user / login. Una vez que inician sesión, el enlace debe cambiar para decir "Cerrar sesión" en lugar de "Iniciar sesión".

¿Hay alguna forma de agregar dicho enlace?

GTS Joe
fuente
No sé qué tema está utilizando, pero el tema Bootstrap 3 para drupal 8 proporciona esta función de forma predeterminada. Puede deshabilitar el elemento Mi cuenta desde el bloque. Por lo que la barra de navegación principal tendrá la Conexión / Desconexión en el lado derecho y acceso al sitio sólo aparecen cuando nadie está conectado y desaparecerá cuando alguien se registra en.
CodeNext
Estoy usando el tema Bootstrap 3 para Drupal 8. Hice exactamente lo que hiciste, desactivé el bloque Mi cuenta (menú de cuenta de usuario), pero no hay un enlace Iniciar sesión / Cerrar sesión en la esquina derecha. ¿Se me escapa algo?
GTS Joe
Acabo de publicar en la sección de respuestas con imagen, por lo que podemos discutir más sobre eso.
CodeNext
¿No tiene que deshabilitar todo el bloque? Siga los pasos que he mencionado en la respuesta.
CodeNext

Respuestas:

10

No necesitamos depender del tema Bootstrap o de nuestras habilidades de programación para mover el enlace " Cerrar sesión " del sistema en cualquier otro menú. Drupal nos permite hacerlo fácilmente.

editar Cerrar sesión enlace

pasar a otro menú

Además, podemos crear dos enlaces personalizados de " Iniciar sesión aquí por favor " y " Sáqueme de allí " con las rutas / user / login y / user / logout relativamente. Esto es mejor porque, a diferencia del enlace "Cerrar sesión" del sistema, nos permite crear tantos enlaces de inicio / cierre de sesión como queramos con atributos personalizados. Cuando el usuario inicie sesión, solo verá el enlace " Cerrar sesión " y viceversa. La única advertencia es que probablemente veas ambos enlaces juntos porque estás conectado al momento de probar los enlaces. Y esto es normal ya que tiene permiso de " Enlace a cualquier página " como administrador. Deshabilite este permiso e intente nuevamente.

drogo
fuente
4

En pocas palabras, crea 2 versiones diferentes de Menú, una con inicio de sesión, otra con cierre de sesión, y le da a cada versión diferentes roles de visibilidad.

1) Menú Editar y agregue el enlace Cerrar sesión.

2) Ahora todo lo que tienes que hacer es configurar el bloque de enlaces del menú principal ingrese la descripción de la imagen aquí

Luego, en Roles, marque ☑ Usuarios autenticados y también ☑ Administrador

ingrese la descripción de la imagen aquí

3) Ahora cree otro Menú ( /admin/structure/menu) que tenga el enlace de "inicio de sesión" y todos los demás enlaces de menú que necesite.

4) Luego vaya a los bloques ( /admin/structure/block) en el Menú principal (suponiendo que esté usando Bartik, puede tener un nombre diferente si está usando un tema personalizado) haga clic en Agregar, agregue el Menú que acaba de crear y configúrelo. Esta vez para Roles, solo marca check Anónimo

No Sssweat
fuente
Hice su sugerencia, pero el bloque de menú personalizado que creo rompe los estilos de enlace (estoy usando el tema Bootstrap). Aunque funciona en cuanto a funcionalidad, no puedo usar este método porque rompe los estilos en el nuevo bloque de menú.
GTS Joe
Pues no te rindas. Si la persona que creó el tema boostrap pudo agregarle los div boostrap, entonces usted puede:)
No Sssweat
3

Hay una mejor manera de hacer esto. Lo que desea hacer es crear su propio complemento y extender la clase MenuLinkDefault. El mejor lugar para buscar es el módulo Drupal / Usuario que proporciona la implementación LoginLogoutMenuLink.

Puede definir su propio complemento si desea, por ejemplo, cambiar el texto o la lógica. Alternativamente, puede simplemente apuntarlo al complemento existente para ahorrar tiempo y simplemente poner el implícito existente. Aquí hay un código de muestra:

Versión simple:

  • Crear my_module/my_module.links.menu.yml

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

Versión avanzada:

  • Copie el complemento en su my_module/src/Plugin/Menu/carpeta
  • Cámbiele el nombre de LoginLogoutMenuLink a MyLoginLogoutMenuLink
  • Actualice el espacio de nombres para reflejar su ubicación, por ejemplo namespace Drupal\my_module\Plugin\Menu;
  • En el archivo cambia class LoginLogoutMenuLink extends MenuLinkDefaultaclass MyLoginLogoutMenuLink extends MenuLinkDefault
  • Cree uno my_module.links.menu.ymlsegún lo anterior, pero asegúrese de nombrar la clase como la ha nombrado ahora y apunte a su módulo. Ver ejemplo a continuación.

Su my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.phpdebe buscar la siguiente manera:

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

Su my_module/my_module.links.menu.ymldebe buscar la siguiente manera:

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

Espero que esto ayude a alguien.

Desarrollador web JNP
fuente
2

Puede hacerlo con el tema Bootstrap 3 Drupal 8, ya que ese tema proporciona esta función de forma predeterminada. Estoy publicando la imagen de mi sitio de prueba de drupal 8. Uno con la página de inicio de sesión y otro con la página de cierre de sesión.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

¿Estás buscando ese tipo de cosas?

Siga los siguientes pasos.

1. Vaya a Estructuras> Bloques. Y asegúrese de la siguiente configuración en la sección de Navegación.

ingrese la descripción de la imagen aquí

2. Vaya a Estructuras> Menús> Menú de cuenta de usuario y desactive Mi cuenta, como se muestra en la siguiente imagen.

ingrese la descripción de la imagen aquí

Por lo tanto, su menú de navegación principal debe mostrar solo Iniciar sesión y Cerrar sesión, como he publicado en el primer par de imágenes.

CodeNext
fuente
¿Estabas buscando esto? ¿funcionó?
CodeNext
1

Si usa el subtema Bootstrap, puede modificar este código para satisfacer sus necesidades:

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

Pon este código en page.tpl.php en subtheme / templates / dentro del bloque, donde necesitas:

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

Lo puse después de la línea 90, en cuyo caso no se colapsa en un dispositivo móvil, si es necesario que se pliegue después de:

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

Programáticamente, puede lograr esto a través del .links.menu.ymlarchivo de su propio módulo . Lo siguiente coloca estos enlaces en el menú "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

Dado que el "nombre_ruta" que cada uno de estos está llamando ya especifica el requisito de inicio / cierre de sesión (consulte https://api.drupal.org/api/drupal/core%21modules%21user%21user.routing.yml/8.4.x ), los enlaces se mostrarán en función del estado de inicio de sesión.

Markfullmer
fuente
No funciona, todavía muestra ambos enlaces
No Sssweat