Páginas de error personalizadas

From Joomla! Documentation

This page is a translated version of the page Custom error pages and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎Nederlands • ‎русский
Split-icon.png
Split Page into Specific Joomla! Versions - J2.5 and 3.x

It has been suggested that this article or section be split into specific version Namespaces. (Discuss). If version split is not obvious, please allow split request to remain for 1 week pending discussions. Proposed since 2 years ago.

Joomla! utiliza el archivo templates/system/error.php para manejar varios Estados de error HTTP, incluyendo los errores errores "403 Forbidden", "404 not Found", y "500 Internal Server". Puedes personalizar el estilo de los resultados de error, si lo deseas.

Es importante entender que error.php es un archivo independiente del CMS de Joomla!, pero depende de la Plataforma Joomla!. Los Plugins no se ejecutan en el archivo. No puedes incluir módulos o usar declaraciones <jdoc:include>.

Reemplazar el Sistema de los Resultados de Error

Para reemplazar el sistema de error de los resultados, copia el archivo templates/system/error.php a tu directorio templates/<nombre-plantilla>.

Si encuentra una, Joomla! hará uso del archivo error.php de la plantilla en uso, en lugar de la que hay en la carpeta templates/system.

Puedes dar formato a la página, como lo desees, para que coincida con tu plantilla.

Reemplazar el Estilo del Sistema

Si deseas cambiar el estilo, copia el archivo templates/system/css/error.css a tu directorio templates/<nombre-plantilla>/css. Luego, actualiza tu archivo templates/<nombre-plantilla>/error.php para hacer referencia a la nueva ubicación de la hoja de estilos cambiando esta línea, como corresponda:

<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/error.css" type="text/css" />

Ahora, simplemente, modifica el archivo error.css, como lo desees, por los requisitos de tu estilo.

Personalizar los Mensajes de Error

Puedes agregar lógica condicional para variar el mensaje devuelto, dependiendo del código de error específico.

Aquí hay un ejemplo de cómo atrapar un error 404 y proporcionar un mensaje personalizado.

<?php  if ($this->error->getCode() == '404') { ?>
	<div id="errorboxheader">Page not found</div>
		<div id="errorboxbody"><p>Sorry! That page cannot be found.</p>
		</div>
	</div>
<?php } ?>

Código de Estado HTTP

Cuando se realiza una solicitud para una página en tu sitio, el servidor devuelve un código de estado HTTP en respuesta a la solicitud. Joomla! devuelve un '200 - the server successfully returned the page' para las páginas de error. Esto es problemático para aquellos que trabajan con Google Webmaster Services y tratan de conseguir un sitemap resuelto.

Si desea que Joomla! devuelva un código de estado para el error, puedes hacerlo mediante la adición de lógica antes de la declaración de la línea DOCTYPE, de la siguiente manera:

<?php 
if ($this->error->getCode() == '404') {
	header("HTTP/1.0 404 Not Found");
} ?>

Más Información sobre Código de Estado HTTP

Usar Tema de Encabezado y Pie de página en Página de Error Estándar

Joomla 1.5 Si quieres ver la página de error con el diseño del tema y no como unaa página de error de URL redirigida o una duplicación de código HTML en la página de error de la plantilla, aquí hay una forma de aplicar el tema de la plantilla a la página de error.

En primer lugar, coloca el siguiente código en templates/<nombre-plantilla>/error.php:

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

include dirname(__FILE__) . "/index.php";
?>

A continuación, has las siguientes modificaciones a templates/<nombre-plantilla>/index.php:

1. Encuentra el siguiente código en index.php

<jdoc:include type="head" />

y reemplázalo con lo siguiente

<?php if (!$this->error->getCode()) : ?>
<jdoc:include type="head" />
<?php else : ?> 
<title><?php echo $this->error->getCode() ?> - <?php echo $this->title; ?></title>
<?php endif; ?>

2. Encuentra el siguiente código en index.php

<jdoc:include type="component" />

y reemplázalo con lo siguiente

<?php if ($this->error->getCode()) : /* check if we are on error page, if yes - display error message */ ?>
  <p><strong><?php echo $this->error->getCode() ?> - <?php echo $this->error->message ?></strong></p>
  <p><strong><?php echo JText::_('JERROR_LAYOUT_NOT_ABLE_TO_VISIT'); ?></strong></p>
  <ol>
    <li><?php echo JText::_('JERROR_LAYOUT_AN_OUT_OF_DATE_BOOKMARK_FAVOURITE'); ?></li>
    <li><?php echo JText::_('JERROR_LAYOUT_SEARCH_ENGINE_OUT_OF_DATE_LISTING'); ?></li>
    <li><?php echo JText::_('JERROR_LAYOUT_MIS_TYPED_ADDRESS'); ?></li>
    <li><?php echo JText::_('JERROR_LAYOUT_YOU_HAVE_NO_ACCESS_TO_THIS_PAGE'); ?></li>
    <li><?php echo JText::_('JERROR_LAYOUT_REQUESTED_RESOURCE_WAS_NOT_FOUND'); ?></li>
    <li><?php echo JText::_('JERROR_LAYOUT_ERROR_HAS_OCCURRED_WHILE_PROCESSING_YOUR_REQUEST'); ?></li>
  </ol>
  <p><strong><?php echo JText::_('JERROR_LAYOUT_PLEASE_TRY_ONE_OF_THE_FOLLOWING_PAGES'); ?></strong></p>

  <ul>
  <li><a href="<?php echo $this->baseurl; ?>/index.php" title="<?php echo JText::_('JERROR_LAYOUT_GO_TO_THE_HOME_PAGE'); ?>"><?php echo JText::_('JERROR_LAYOUT_HOME_PAGE'); ?></a></li>
  </ul>

  <p><?php echo JText::_('JERROR_LAYOUT_PLEASE_CONTACT_THE_SYSTEM_ADMINISTRATOR'); ?>.</p>
<?php else : ?>
  <jdoc:include type="component" />
<?php endif; ?>

Ahora el tema de la plantilla, también, se aplica a las páginas de error.

Nota: El módulo incluido en la plantilla no funcionará en caso de error en la página creada por este método (pero funciona en otras páginas).

El uso de módulos en las páginas de error

Los módulos no pueden ser incluidos en páginas de error de la misma manera que la plantilla index.php, porque no se pueden utilizar las declaraciones <jdoc:include>. Existe una forma alternativa para utilizar JModuleHelper.

Para incluir un módulo único por título, puedes utilizar:

if (JModuleHelper::getModule('menu')) { 
    echo $doc->getBuffer('module', 'menu');
}

Para incluir múltiples módulos por posición, puedes utilizar:

$modules = JModuleHelper::getModules( 'footer_3' );
$attribs['style'] = 'xhtml';
foreach ($modules AS $module ) {
    echo JModuleHelper::renderModule( $module, $attribs );
}