No hay enlaces de navegación en las páginas 404


11

Cuando visito una página que no existe, espero ver los enlaces primario y secundario como en cualquier otra página, pero lo que obtengo es que no hay enlaces de navegación en la página 404. Consulte también Sin enlaces de navegación en 404 páginas .

He encontrado una solución, pero estoy feliz si algo más puede solucionarlo (posiblemente sin usar módulos adicionales).

Respuestas:


14

Puede hacerlo definiendo una página en un módulo personalizado.

Cree una página para la categoría "Página no encontrada" utilizando hook_menu().

function MODULE_menu() {
  $items['page-not-found'] = array(
    'title' => '',
    'page callback' => 'MODULE_page_not_found',
    'access callback' => TRUE,
  );
  return $items;
}

function MODULE_page_not_found() {
  drupal_set_title('Page not found');
  $cust_err = "";
  $cust_err = $cust_err . "The requested page " . current_path() . " could not be found";
  return $cust_err;
}

La devolución de llamada de la página se utiliza current_path()para devolver la ruta de la página que causa el error 404.

Vaya a Admin> Configuración> Sistema> Información del sitio e ingrese la página no encontrada (el mismo nombre definido en hook_menu) en la página Predeterminada 404 (no encontrada) .

snap1

Ahora la página de error aparece como en la siguiente captura de pantalla.

snap2

Está claro que contiene todos los enlaces de navegación, y también la URL de la página que produce el error (muy similar a la página original no encontrada). Y el módulo mencionado en la respuesta anterior por @ Nikhil generará "No se pudo encontrar la página solicitada". pero no contiene la URL de la página que causa el error.


¿Estás seguro de que obtendré los enlaces de navegación en la página?
niksmac

1
@NikhilM He probado esto y las capturas de pantalla son reales ;-)
AjitS

Lo he probado ahora. Personalizo el texto que se muestra en la página página no encontrada. ¡pero aparentemente muestra el texto predeterminado de otro lugar! ¿Qué está pasando en Drupal?
shekoufeh

Estaba luchando con esto ayer en el trabajo, muy buena solución.
Cyclonecode

11

Hay un módulo para hacer que esto funcione 404 Navigation

En las páginas de error 404 No encontrado, Drupal omitirá la representación de todos los enlaces de navegación de su sitio web por razones de rendimiento *. Algunos de estos incluyen:

El bloque "Enlaces principales" y cualquier otro bloque de enlaces del menú. Los enlaces principales y los enlaces secundarios de su tema. * A menos que haya configurado una "página 404 por defecto (no encontrada)" en admin / config / system / site-information.

También hay un parche para arreglar esto en D7.

En D8 Vea ESTO También ESTO


6

También hay buenas alternativas de módulos:

  • Búsqueda 404

    En lugar de mostrar una "página 404 no encontrada" estándar, este módulo realiza una búsqueda de las palabras clave en la URL, por ejemplo, si un usuario accede a http://example.com/does/not/exist , este módulo realizará una búsqueda para "no existe" y muestra el resultado de la búsqueda en lugar de la página 404. Esto debería ayudar a retener a los visitantes que ingresan desde URL antiguas vinculadas desde otros sitios o desde índices de búsqueda.

  • 404 rápido

    Drupal tiene costosos errores 404. En un sitio 'promedio' con una carga de módulo 'promedio', puede estar mirando a 60-100MB de memoria consumida en su servidor para entregar un 404. Considere una página con un enlace .gif incorrecto y un archivo .css faltante. Esa página generará 2 404 junto con la carga real de la página. Lo más probable es que esté mirando 180 MB de memoria para el servidor de esa página en lugar de los 60 MB que debería tomar.


3

Puede hacerlo definiendo una página en un módulo personalizado.

Cree una página para la categoría "Página no encontrada" usando hook_menu ().

 function MODULE_menu() {
   $items['page-not-found'] = array(
     'title' => '',
     'page callback' => 'MODULE_page_not_found',
     'access callback' => TRUE,
   );
   return $items;
 }

 function MODULE_page_not_found() {
   drupal_set_title('Page not found');
   $cust_err = "";
   $cust_err = $cust_err . "The requested page " . current_path() . " ould not be found";
   return $cust_err;
 }

Es casi bueno Pero este código devuelve:

"No se pudo encontrar la página solicitada página no encontrada"

necesita cambiar current_path () a request_uri () y devolverá:

"No se pudo encontrar la página / request_uri solicitada"


1
Cambié el mensaje de error a t('The requested page "@path" could not be found.', array('@path' => request_uri()));. De esta manera, la traducción predeterminada de Drupal se usa cuando su sitio es multilangual.
Jeroen

Tienes razón, es una buena práctica =)
Andy Mark
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.