Personalizar la página de error en Magento

Hace unos días me topé con un proyecto que tenía como marca distintiva el haber aplicado todas y cada una de las malas prácticas, todas, dentro del mismo proyecto.

Uno de los errores que me parecieron más burdos, fue el hecho de modificar los archivos del gestor de errores de Magento (si, la pantalla que nos aparece mostrándonos un número de reporte).

Si bien esto puede considerarse un tema menor, será un problema al momento que debamos hacer un upgrade de versión. Como siempre, la plataforma tiene una forma de manejar este caso y es bastante sencilla.

Por defecto, la pantalla de error se ve así.

Página de error de Magento

Ya sea que por cuestiones gráficas o funcionales necesitemos cambiar la presentación de errores, la forma correcta de hacerlo es demasiado simple.

Lo primero será será copiar el archivo /errors/local.xml.sample como /errors/local.xml.

El segundo paso es duplicar el directorio /errors/default y asignarle un nombre cualquiera (si, funciona de la misma manera que los themes).

Ahora editamos el archivo /errors/local.xml, en el cual veremos lo siguiente.

<?xml version="1.0"?>
<!--
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     Errors
 * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
-->
<config>
    <skin>default</skin>
    <report>
        <!--
            "action" can be set to "print" to show exception on screen and "email"
            to send exception on specified email
        -->
        <action>print</action>
        <!--
            in "subject" you can set subject of email
        -->
        <subject>Store Debug Information</subject>
        <!--
            "email_address" admin email address
        -->
        <email_address></email_address>
        <!--
            "trash" is handle about trace info
            value "leave" is for store on disk
            value "delete" is for cleaning
        -->
        <trash>leave</trash>
    </report>
</config>

Lo que tenemos que cambiar para utilizar nuestro skin, es el valor del nodo <skin> en la línea 29. Ahi asignaremos el nombre que le dimos al directorio en el segundo paso.

Para mantener la misma lógica que los reportes por defecto, vamos a comentar la línea 35, del nodo <action>.

Ahora si, luego de jugar con el phtml y el css, al volver a presentarse un error, veremos cómo se aplica nuestro theme y no el que viene por defecto.

Error personalizado en Magento

De ésta forma logramos dos cosas:

  • Personalizar la página de error (que tendrá o dejará de tener la funcionalidad que necesitemos).
  • Que los errores soporten una actualización de versión.

Existen algunas opciones out-of-the-box que podemos aprovechar.

La primera, no recomendable para entornos productivos, es que descomentemos la línea 35, la del nodo <action>, dejándole asignado el valor «print».

Al hacerlo, podremos ver el contenido del reporte en pantalla.

Error personalizado con traceroute en Magento

Otra opción, es la habilitar un formulario que servirá para que se nos envié un email con el problema.

En este caso, modificamos el valor de <action> a «email», y en el nodo <email_address> ingresamos la dirección de correo en la cual quisiéramos recibir el mensaje.

Error personalizado con envío de email en Magento

Magento es extensible… no hay motivo para estar tocando los archivos originales. O dicho de otra forma: «EL CORE NO SE TOCA».