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).
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) .
Ahora la página de error aparece como en la siguiente captura de pantalla.
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.
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.
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.
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.
Hay un módulo para hacer que esto funcione 404 Navigation
También hay un parche para arreglar esto en D7.
En D8 Vea ESTO También ESTO
fuente
También hay buenas alternativas de módulos:
404 rápido
fuente
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 ().
Es casi bueno Pero este código devuelve:
necesita cambiar current_path () a request_uri () y devolverá:
fuente
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.