Пользовательские страницы ошибок
From Joomla! Documentation
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 5 {{{4}}} ago.
Joomla! использует файл templates/system/error.php для обработки нескольких ошибок статуса HTTP, включая ошибки «403 Forbidden», «404 Not Found» и «500 Internal Server». При желании вы можете стилизовать результаты ошибок.
Важно понимать, что error.php - это независимый файл от Joomla! CMS, но зависит от Joomla! Платформа. Плагины не запускаются в этом файле. Вы не можете включать модули или использовать операторы <jdoc: include>.
Переопределение результатов системных ошибок
Чтобы переопределить результаты системных ошибок, скопируйте файл templates/system/error.php в каталогtemplates/<template-name>.
Если он найдет, Joomla! будет использовать файл error.php из текущего шаблона вместо системного файла.
При желании вы можете отформатировать страницу в соответствии с вашим шаблоном.
Переопределение стиля системы
Если вы хотите изменить стиль, скопируйте файл templates/system/css/error.css в каталог templates/<template-name>/css. Затем обновите файл templates/<template-name>/error.php, чтобы он ссылался на новое местоположение таблицы стилей, соответственно изменив эту строку:
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/error.css" type="text/css" />
Затем просто измените error.css, как вам нужно, для ваших требований к стилю.
Настройка сообщений об ошибках
Вы можете добавить условную логику, чтобы варьировать возвращаемое сообщение в зависимости от конкретного кода ошибки.
Вот пример того, как перехватить ошибку 404 и предоставить пользовательское сообщение.
<?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 } ?>
Код статуса HTTP
Когда делается запрос на страницу на вашем сайте, сервер возвращает HTTP-код состояния в ответ на запрос. Joomla! возвращает '200 - сервер успешно вернул страницу' для страниц с ошибками. Это проблематично для тех, кто работает со Службами Google для веб-мастеров и пытается решить проблему с картой сайта.
Если вы хотите чтобы Joomla! вернула код состояния ошибки, вы можете сделать это, добавив логику перед строкой DOCTYPE, следующим образом:
<?php
if ($this->error->getCode() == '404') {
header("HTTP/1.0 404 Not Found");
} ?>
Дополнительная информация о коде состояния HTTP
- Создать пользовательскую страницу ошибки 404
- HTTP/1.1 Status Code Definitions
- Список кодов состояния HTTP
Использование заголовка и нижнего колонтитула темы на странице стандартных ошибок
Если вы хотите видеть страницу ошибки в дизайне темы и вам не нравится перенаправление на URL страницы ошибки или дублирование HTML в шаблоне страницы ошибки, вот способ применить шаблон темы к странице ошибки.
Сначала поместите следующий код в templates/<template-name>/error.php:
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
include dirname(__FILE__) . "/index.php";
?>
Затем внесите следующие изменения в templates/<template-name>/index.php:
1. Найдите следующий код в index.php
<jdoc:include type="head" />
и замените его следующим
<?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. Найдите следующий код в index.php
<jdoc:include type="component" />
и замените его следующим
<?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; ?>
Теперь ваш шаблон темы применяется и к страницам ошибок.
Примечание: Модуль, включенный в шаблон, не будет работать на странице ошибок, созданной этим методом (но будет работать на других страницах).
Использование модулей на страницах ошибок
Модули не могут быть включены в страницы ошибок так же, как index.php шаблона, потому что вы не можете использовать операторы <jdoc: include>. Существует альтернативный способ использования JModuleHelper.
Чтобы включить один модуль по заголовку, вы можете использовать:
if (JModuleHelper::getModule('menu')) {
echo $doc->getBuffer('module', 'menu');
}
Чтобы включить несколько модулей по позиции, вы можете использовать:
$modules = JModuleHelper::getModules( 'footer_3' );
$attribs['style'] = 'xhtml';
foreach ($modules AS $module ) {
echo JModuleHelper::renderModule( $module, $attribs );
}