Plantilla personalizada para páginas de error 404


12

Una pregunta rápida novato aquí! ¿Cómo configurar un tema para usar una plantilla personalizada para páginas de error 404 en lugar de usar page.tpl?

Respuestas:


10

Sigue estos pasos:

  1. Cree una nueva página utilizando el módulo Paneles (página vacía o agregue cualquier contenido)

  2. En admin / config / system / site-information establezca la página predeterminada 404 (no encontrada) en su nueva página

  3. Anular el archivo de plantilla para esa página (página - error.tpl.php)

  4. Elimina todas las regiones que no necesites y pon tu código


55
Y uno ni siquiera necesita usar paneles. El módulo que maneja una página o el nodo más simple de "página básica" también lo haría.
Mołot

2
¿Por qué necesitarías un módulo contribuido para crear un 404?
MrUpsidown

1
El problema con el uso de un nodo, como una página básica, es que aparecerá en los resultados de búsqueda y otros listados relacionados con el contenido, lo que no es deseable.
rooby

27

Otra solución más de esta discusión que funciona sin paneles u otros módulos personalizados.

En su carpeta de temas, ubique template.phpy escriba este código. Reemplace YOURTHEMEcon el nombre de su tema:

function YOURTHEME_preprocess_page(&$vars) {
  $header = drupal_get_http_header('status'); 
  if ($header == '404 Not Found') {     
    $vars['theme_hook_suggestions'][] = 'page__404';
  }
}

Siempre que ocurra 404 se page--404.tpl.phpusará tu . Recuerde poner "-" no "__" en su nombre de archivo de plantilla.


Recuerde borrar su caché si acaba de crear el page--404.tpl.phparchivo.
Blake Erickson

Para 403, el encabezado $ == '403 Prohibido'.
Henry

Esto no parece funcionar en un módulo, la plantilla en la carpeta del módulo no se supera. ¿Cómo hacer lo mismo con la función YOURMODULE_preprocess_page (& $ vars)?
Matoeil

3

Si desea tener una página 404 personalizada que no implique la creación de una página (nodo), use el módulo customerror .

Si tiene una página 404 en Drupal, aparecerá en los resultados de búsqueda y / o en sus listados de Vistas.

Al usar el módulo customerror, puede anular la plantilla creando una página - customerror.tpl.php en su carpeta de temas. Recuerde también vaciar su caché después de haber creado un nuevo archivo de plantilla.


Eso se veía bien, pero para aquellos de ustedes que también usan el módulo de redireccionamiento, parece que no juegan bien juntos. Nunca pude obtener customerror para mostrar su página sobre lo que mostró la redirección.
evanmcd

1
Utilizamos los módulos Redirect y Customerror al unísono sin estos problemas. Al revisar las páginas de configuración de ambos módulos, parece que customerror (además de su funcionalidad de error personalizada) también tiene una función para administrar redireccionamientos, aunque con una interfaz burda. Si está utilizando la redirección (y el OP no lo está), simplemente evite usar la configuración de redirección del cliente, y no debería tener ningún problema.
alexkb

0

Sin asumir ninguna convención que pueda existir en su base de temas, la pregunta es finalmente cómo puedo saber con seguridad qué archivo de plantilla usar ...

Aquí están los pasos:

  1. Crea una base básica y llámalo como quieras.
  2. Asigne esa página a la respuesta 404 admin / config / system / site-information
  3. Habilite el modo theme_debug.
  4. Escriba una url estúpida en su barra de direcciones.
  5. Llegas a tu página creada inicialmente
  6. Mire la fuente y la sugerencia de plantillas, obtendrá algo como:ingrese la descripción de la imagen aquí

  7. Eso es sencillo, no hay que preprocesar el archivo o template.php para modificar.

Yo mismo elegí el marcado por el hacha, ya que quería algo desnudo con una foto de marco completo y solo un enlace a la parte posterior.


Tenga en cuenta que la página básica que creó para el error 404 ahora también aparecerá en los resultados de búsqueda como una página de contenido.
rooby
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.