hooks – Cómo evitar mostrar el tema en una devolución de llamada de página personalizada en hook_menu ()

Pregunta:

Estoy desarrollando un módulo personalizado con un script de devolución de llamada en foo/myurl :

function foo_menu() {
  $items = array();
  $items['foo/myurl'] = array( // change 'foo/myurl' to the url you want
    'title' => 'Callback',
    'type' => MENU_CALLBACK,
    'page callback' => 'custom_callback',
    'access arguments' => array('access content'),
  );
  return $items;
}

function custom_callback () {
  echo 'success';
  return;
}

Pero esta es la URL a ser llamado por un guión tercera parte, y sólo quieren devolver el echo cadena Ed, ¿cómo puedo evitar que el resto del tema de la carga?

Gracias

Respuesta:

Simplemente no devuelva ningún valor y salga.

En Drupal 7, eso se puede hacer llamando a drupal_exit () . En Drupal 6, usas un código similar al siguiente:

function custom_callback() {
  echo 'success';
  module_invoke_all('exit');
  exit();
}

Cuando llamas a drupal_exit() no necesitas usar exit también, ya que la función ya lo usa.

exit() (o drupal_exit() ) evita que se invoquen otros ganchos después de hook_exit() .
Drupal normalmente llama a drupal_page_footer() después de que la devolución de llamada del menú devuelve su valor; el uso de exit() (o drupal_exit() ) evita que también se llame a la función. El efecto es que la salida de la devolución de llamada del menú no se almacena en caché. Si se desea almacenar en caché la salida, se puede module_invoke_all('exit') la llamada a module_invoke_all('exit') y exit() , o drupal_exit() . En la medida en que la devolución de llamada del menú no devuelva ningún valor, la página de Drupal no se renderizará, como es evidente en el código de Drupal 6 contenido en el archivo index.php:

$return = menu_execute_active_handler();

// Menu status constants are integers; page content is a string.
if (is_int($return)) {
  switch ($return) {
    case MENU_NOT_FOUND:
      drupal_not_found();
      break;
    case MENU_ACCESS_DENIED:
      drupal_access_denied();
      break;
    case MENU_SITE_OFFLINE:
      drupal_site_offline();
      break;
  }
}
elseif (isset($return)) {
  // Print any value (including an empty string) except NULL or undefined:
  print theme('page', $return);
}

drupal_page_footer();

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım