Mostrar 'iniciar sesión' en el menú del usuario cuando no haya iniciado sesión

8

Me pregunto, ¿dónde está el código que oculta "Mi cuenta" y "Cerrar sesión" en el menú del usuario? Solo curiosidad, aprender de ese código. ¿Alguna forma de saber dónde buscar si quieres saber algo como esto?

Agregué un enlace "Iniciar sesión" a este menú, y quiero ocultarlo cuando nadie haya iniciado sesión.

gritando SiLENCE
fuente

Respuestas:

13

Cuando tiene algo que sucede con un enlace, debe buscar en el código hook_menu(). Luego debe adivinar en qué módulo se encuentra. En este caso, eche un vistazo al módulo de usuario principal:

function user_menu() {
  $items['user/login'] = array(
    'title' => 'Log in',
    'access callback' => 'user_is_anonymous',
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );

  return $items;
}

Tenga en cuenta la 'access callback' => 'user_is_anonymous',línea. Esto significa que solo puede hacer esto si es anónimo (es decir, no ha iniciado sesión). Esto significa que solo debería poder hacer una entrada de menú con "usuario / inicio de sesión" como ruta, y el enlace solo se mostrará cuando haya cerrado la sesión.

mpdonadio
fuente
16

Puede agregar un enlace de menú user/login, la devolución de llamada de acceso de que verifica que solo se muestra a usuarios anónimos. Al igual user/logoutque solo es visible para usuarios registrados.

La definición de estas devoluciones de llamada () son, como se menciona en la otra respuesta, en user_menu()

Berdir
fuente
+1 y lo mismo es cierto para user/register: cree el enlace de la manera habitual a través de la interfaz de usuario del menú, y solo aparece para los usuarios que no inician sesión automáticamente.
user56reinstatemonica8
1

Verifique las definiciones del menú user_menu()en el módulo de usuario. La devolución de llamada de acceso determina cuándo se mostrará el elemento del menú.

Gabor Szanto
fuente