jueves, 22 de marzo de 2012

Usar error_page para crear páginas de error 404

Por ahora, si alguien prueba algunas de las nuevas opciones de la Configuración de Blogger, encontrará pocos resultados o ninguno. Puede ser que, como siempre, lancen algo que luego corrigen o que, simplemente, no estamos entendiendo la idea o cómo funcionan esas opciones.

Una de las que más interés causa es la llamada Mensaje de página no encontrada personalizado y tampoco parecería estar funcionando por acá aunque en otros casos aprecería que si. Tengo la impresión que es algo que sólo funciona en las plantillas de nuevo estilo y no en las tradicionales.

Ahora bien, la aparición de esa nueva posibilidad también aprece haber cambiado algo en el funcionamiento de Blogger; algo que en realidad existía antes y que permitía crear una pagina de error 404 personal; en ese tiempo podíamos usar a un dato llamado data:numposts que era cero cuando la entrada no existía y por lo tanto, podía condicionarse la plantilla para mostrar algo especial.

Luego cambió y lo que mostraba Blogger era una página genérica especial informando del error. En este momento, cuando tratamos de acceder a una entrada inexistente, lo que muestra Blogger es nuestra plantilla con el contenido de <div class='blog-posts'> vacío. Ese div se encuentra en <b:includable id='main' var='top'> e incluye el loop que genera las entradas.

Pero ¿cómo detectar si una página existe o no existe?

Yo no sé si ates existía o es un dato nuevo pero, a data:blog.pageType (index, item, archive, static_page) se le ha agregado un nuevo valor denominado error_page así que una condición de este tipo mostraría un texto "ERROR" si la página no existe:
<b:if cond='data:blog.pageType == &quot;error_page&quot;'>
ERROR
</b:if>
¿Y cómo podemos usar algo así?

Eso ya dependerá de la imaginación de cada uno. Una alternativa sencilla es crear una página estática de error; por ejemplo, la guardo con el título 404 y luego, inmediatamente después de <head> coloco un script que re-direccione los errores a esa página estática:
<b:if cond='data:blog.pageType == &quot;error_page&quot;'>
<script type='text/javascript'>
//<![CDATA[
window.location = "http://miblog.blogspot.com/p/404.html";
//]]>
</script>
</b:if>
Otra posibilidad es armar esa página de error en la plantilla misma para lo cual podemos condicionar los distintos elementos que la forman. Esto no es algo que pueda ser aplicado de manera genérica porque dependerá completamente de la forma en que está estructurada la plantilla pero, acá va una idea explicación aproximada.

Primero, voy a poner antes de </head> esa condición y allí definiré las reglas de estilo de esa "página":
<b:if cond='data:blog.pageType == &quot;error_page&quot;'>
<style>
#error404 {
/* este será mi contenedor */
}
/* y el resto de las reglas dependerán de lo que quiera mostrar */
</script>
</b:if>
Ahora condicionaré la plantilla; en mi caso, quiero dejar el header y el footer pero eliminar las dos columnas centrales, la de las entradas y la sidebar así que, sin desplegar los artilugios para que sea sencillo, condiciono esa parte:
<b:if cond='data:blog.pageType == &quot;error_page&quot;'>
<!-- esta es la página de error agregada -->
<div id='error404'>
< ....... y aquí colocaré el HTML se la página de error ....... >
</div>
<b:else/>
<!-- esta es la página normal con el código tal como está ahora -->
.......
<div id='main-wrapper'> ....... </div>
<div id='sidebar-wrapper'> ....... </div>
.......
</b:if>
Y en todo caso, verifico que no me haya equivocado usando la Vista Previa. Si todo está bien, veré el blog de modo normal.

Una vez guardada la plantilla ... habrá que probar si funciona colocando una dirección URL errónea y esperar que Blogger no vuelva a cambiar las cosas otra vez.

No hay comentarios:

Publicar un comentario