Чтобы сделать собственную страницу 404 для сайта постороенного на Joomla 1.5 я поступил следующим образом.
Создал в корне папки шаблона файл «error.php» и вставил в него код из файла «/templates/system/error.php». Далее после строки «defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );»
Написал такой код:
<?php
//***
if (intval($this->error->code) == 404) :
function get_REFERER()
{
$host = 'http://'.$_SERVER['HTTP_HOST'];
if ($_SERVER['HTTP_REFERER'] == false)
return false;
return str_replace($host, '', $_SERVER['HTTP_REFERER']);
}
?>
После закрытия php блока вставил собственно код шаблона:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <title><?php echo $this->error->code ?> - <?php echo $this->title; ?></title> <link rel="shortcut icon" href="/templates/<?php echo $this->template ?>/images/favicon.ico" /> <link rel="stylesheet" href="/templates/<?php echo $this->template ?>/css/errors.css" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> <body> <div class="content-block"> <div class="massage-404"> <p>Ooooops. Такой страницы нет.</p> <p>Ссылка по которой вы пришли либо устарела, либо вы неправильно набрали адрес. Попробуйте перейти по одной из следующих ссылок.</p> <p>Извините за предоставленные неудобства.</p> <ul> <?php if ( (get_REFERER() != false) and (get_REFERER() != $_SERVER['REQUEST_URI']) ) : ?> <li><a href="<?php echo $_SERVER['HTTP_REFERER']; ?>">Вы пришли отсюда</a></li> <?php endif; ?> <li><a href="/">Главная страница</a></li> </ul> </div> <h1 class="error-code"><?php echo $this->error->code; ?></h1> </div> </body> </head>
Затем вставляем вот это: <?php else : ?>, дальше идёт код оригинального шаблона.
И в самом конце файла дописываем вот это : <?php endif; ?>
Вот и всё.
А теперь объясняю, что к чему.
- Файл «/templates/system/error.php» в Джумла – это шаблон отображения ошибок. Вот только каких я ещё не разобрался и по этому сделал условие. Чтобы для ошибки 404 отображался мой шаблон, а для остальных оригинальный. «if (intval($this->error->code) == 404) :» – это и есть то самое условие.
- Далее мы вставили функцию, которая будет возвращать очищенное от домена и http:// значение серверной переменной $_SERVER['HTTP_REFERER'] или, если её нет, false. Эта функция будет использоваться моим шаблоном для отображения ссылки «Вы пришли отсюда».
- Далее код самого шаблона. В нём ничего нового кроме, разве что, ссылки, о которой я говорил в пред-идущем пункте. Если посетитель пришел на страницу 404 с какого то адреса, то нам нужно показывать эту ссылку, а если он неправильно набрал адрес, то значение $_SERVER['HTTP_REFERER'] будет пустым и, соответственно, эта ссылка привела бы его на эту же страницу 404. По этому мы написали в шаблоне следующее условие «if ( (get_REFERER() != false) and (get_REFERER() != $_SERVER['REQUEST_URI']) ) :». То есть, показывать ссылку, если значение $_SERVER['HTTP_REFERER'] не пустое и оно не соответствует текущей странице.
- Затем после своего шаблона мы вставили «<?php else : ?>», содержимое которого выполняется, если условие «if (intval($this->error->code) == 404) :» не верно. То есть показ оригинального шаблона ошибок. И в самом конце файла мы вставили код «<?php endif; ?>», который говорит интерпритатору о том, что это конец выше описанного условия.
И в качестве бонуса – видео про Интерактивное зеркало, о котором я узнал от господина Шакина