it-swarm-es.com

¿Qué pasa con este código?

function welcome_menu() {
  $item=array();
  $item['welcome'] = array(
    'title' => 'welcome',
    'access callback' => 'welcome_init', 
    'page callback' => 'welcome_test',
    'type' => MENU_CALLBACK,
  ); 

  return $item;
}

/*
 * Implements hook_init().
 */
function welcome_init() {
  if (empty($GLOBALS['user']->uid)&& arg(0)!='welcome') {
    drupal_goto('welcome');
  }
}

function welcome_test() {
  $output = 'welcome';
  return $output;
}

Quiero redirigir automáticamente a los usuarios anónimos a la página de inicio de sesión, y evitar que un usuario autenticado pueda ver esta página. ¿Cómo uso user_login_block() como devolución de llamada de la página?

1
enjoylife

Una devolución de llamada de acceso debe devolver un valor booleano que es TRUE cuando los usuarios puedan acceder a la página, y FALSE cuando no pueden acceder a la página; No debe redirigir a los usuarios a otras páginas.

Drupal tiene una función que devuelve TRUE cuando el usuario es anónimo.

function welcome_menu() {
  $items = array();

  $items['welcome'] = array(
    'title' => 'welcome',
    'access callback' => 'user_is_anonymous', 
    'page callback' => 'welcome_test',
    'type' => MENU_CALLBACK,
  ); 

  return $item;
}

El código es similar al utilizado por el módulo de usuario.

function user_menu() {
  // …

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

  // …
  return $items;
}

Para mostrar el bloque de inicio de sesión con la devolución de llamada de menú, debe cambiar su código de función con el siguiente.

function welcome_test() {
  return drupal_get_form('user_login_block');
}

hook_init () no se invoca para páginas en caché, y Drupal normalmente almacena las páginas para usuarios anónimos (cuando está configurado para hacerlo).

1
kiamlaluno

Lo más obvio es que no sigue los estándares de codificación de Drupal. Hace que sea muy difícil de leer.

hook_init () es su propio gancho, no debe usarse como una devolución de llamada de acceso. Acceso Las devoluciones de llamada deben devolverse verdaderas o falsas.

2
tim.plunkett