< Заур Магомедов />

профессиональный верстальщик и блоггер

Мое хобби - разработка сайтов, но со временем это переросло в постоянный и стабильный источник дохода.

Заур Магомедов
Главная » Joomla » Страница 404 в Joomla 3. Как создать страницу 404-ой ошибки средствами Joomla?

Страница 404 в Joomla 3. Как создать страницу 404-ой ошибки средствами Joomla?

Страница 404 в Joomla 3

Пост был обновлен: Сен 15, 2016

Здравствуйте дорогие друзья! Давно не писал на блоге, были на то причины. В данной заметке поговорим о такой немаловажной детали для сайта, как страница 404-ой ошибки. Для тех, кто не знает, что такое страница 404-ой ошибки — это страница, которая показывается пользователю, если он перешел по несуществующему адресу или по адресу страницы, которая была удалена. Чтобы создать такую страницу ошибки можно воспользоваться специальными расширениями, например, компонентом Error 404. Но я не любитель сторонних расширений, если все можно сделать стандартными средствами. А в данном случае страничку 404 ошибки можно создать встроенными средствами joomla. Создавать страничку будем для joomla 2.5 — 3.0.

Итак, давайте сначала посмотрим как выглядит стандартная страница 404-ой ошибки.

Страница 404 в joomla - cтандартная страница 404 ошибки joomla

Я думаю все согласятся со мной, что выглядит не очень красиво. Лично по мне, так эта картинка выглядит как то агрессивно. А нужно наоборот — чтобы не отпугивала пользователя. Необходимо дать ему возможность перейти на другие страницы сайта. А еще лучше, оформить данную страницу немного с юмором. Посмотрите как оформили свою страничку 404 сайт телеканала ТНТ — http://tnt-online.ru/404. Обновите страничку несколько раз и вы увидите, что такие странички могут не только отталкивать, но и притягивать. Прикольно, да?

Теперь давайте поговорим о том, как подобное реализовать на сайте под управлением joomla. Конечно, разные странички 404 как у ТНТ я вам не обещаю, но нечто привлекательное можно сделать. Первым делом нам необходимо создать файл error.php и положить его в корень вашего шаблона. Путь до файла error.php будет иметь следующий вид — /templates/ ваш шаблон /error.php. Теперь о содержимом файла. Создаем данный файл любым текстовым редактором (я пользуюсь Sublime Text 3) и вставляем HTML-код верстки вашего шаблона из файла index.php. Далее необходимо причесать некоторые моменты, чтобы у нас выводились модуля в модульных позициях, т.к. код вывода модулей из файла index.php шаблона здесь работать не будет. Для этого в начало документа вставляем следующий код.

<?php 
defined('_JEXEC') or die; // Запрет на прямой доступ к файлу
jimport('joomla.application.module.helper'); // Подключение вывода модулей из ядра
// Get language and direction
$doc             = JFactory::getDocument();
$app             = JFactory::getApplication();
$this->language  = $doc->language;
$this->direction = $doc->direction;
?>

Добавим кодировку страницы UTF-8 и заголовок окна браузера между тегами <head></head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Ошибка <?php echo $this->error->getCode()." — "; echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8');?></title>

Подключаем файлы стилей и скриптов (если того требует страница).

<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/css/style.css" />
<script src="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/js/init.js"></script>

Теперь заменяем код вывода модулей

Читайте также:  Установка Joomla 2.5 на локальный сервер
<jdoc:include type="modules" name="module-position" />

на

<?php
 $modules =JModuleHelper::getModules('module-position'); // Здесь вводим название модульной позиции
 foreach ($modules as $module){
 echo JModuleHelper::renderModule($module);
 } ?>

Далее удаляем код вывода контента

<jdoc:include type="component" style="xhtml" />

а вместо него вставляем код ошибки

<div class="error-message-block"> 
     <h1>Ошибка <?php echo $this->error->getCode(); ?></h1>
     <p class="error-message"><?php echo htmlspecialchars($this->error->getMessage(), ENT_QUOTES, 'UTF-8');?></p>
     <div class="btn-block">
          <a class="btn btn-primary btn-large " href="/">Перейти на главную</a>
     </div> 
</div>

Вообще, код выше можете заменить на свой и оформить по своему, оставив только php-код вывода ошибки. Здесь уже ваш полет фантазии, а какая фантазия может быть я вам уже показал на примере сайта канала ТНТ.

В принципе, все. Можем проверять, введя несуществующий урл на сайте. Вот как это смотрится у меня на демо-сайте.

Фантазировать не стал, оформил по скромному. Самое главное данная страничка теперь отдает код заголовка 404.

Ошибка 404 страницы в консоле

Я решил переписать данную статью, т.к. я выводил страничку ошибки немного другим способом, также через файл error.php. Суть ее состояла в том, что в файл error.php вставлялся код, который при появлении ошибки перенаправлял пользователя на заранее созданную страницу 404. Прошлый способ содержал некоторые ошибки, в частности, страница ошибки не отдавала код заголовка — 404, а вместо нее выводился код — 200 Ок. Но по логике должно быть все же 404.

На этом все. Жду вопросы в комментариях.

Пост был обновлен: Сен 15, 2016

Заур Магомедов
Заур Магомедов

Верстальщик с огромным опытом работы. Занимаюсь созданием сайтов с 2009 года. Веду свои проекты, в том числе и данный блог.

У меня вы можете:

Оцените пост:

1 балл2 балла3 балла4 балла5 баллов
голосов: 10, средний бал: 2,00 / 5
Загрузка...

Проверка орфографии

Система Orphus

34 комментариев к статье "Страница 404 в Joomla 3. Как создать страницу 404-ой ошибки средствами Joomla?"

  • Андрей Фев 17, 2016 в 21:40

    сделал все как в статье. При проверке на белом фоне след. надпись:
    Fatal error: Call to undefined method Exception::get() in /home/ovks1/public_html/templates/baseline/error.php on line 7
    Если просто написать просто к адресу сайта дописать/error.html созданная страничка 404 отображается нормально
    Сайт http://ovk-s.com.ua

    • Заур Магомедов
      Заур Магомедов Фев 18, 2016 в 0:29

      Я так понял проблему вы уже решили?

      • Андрей Фев 18, 2016 в 0:48

        нет

        • Заур Магомедов
          Заур Магомедов Фев 18, 2016 в 0:52

          Я зашел на ваш сайт и ввел несуществующий адрес. Выдало 404 без проблем — Саня бородач… Когда у вас эта ошибка появляется?

        • Андрей Фев 18, 2016 в 0:53

          А хотя да, сейчас все работает нормально. Изначально в админпанели «Система-общие настройки — настройки СЕО» у меня был отключен пункт «Добавлять суффикс к URL.»
          Возможно ошибка исчезла с включением этой настройки?
          хотя я прописывал код вот так header(‘Location: /error.html’); и так header(‘Location: /error’); но ошибка была

          • Заур Магомедов
            Заур Магомедов Фев 18, 2016 в 0:55

            Все правильно. Не знаю даже, у меня не было проблем с этим.

            • Андрей Фев 18, 2016 в 0:59

              Сейчас попробую отключить пункт — Добавлять суффикс к URL
              И файле error.php
              пропишу след. код
              _error->get(‘code’) == ‘404’) {
              header(«HTTP/1.0 404 Not Found»);
              header(‘Location: /error’);
              exit;
              и посмотрю еще раз

              • Андрей Фев 18, 2016 в 1:05

                Ничего не понимаю… Вроде бы работает. Посмотрите, пожалуйста, как у вас отображается.

                • Заур Магомедов
                  Заур Магомедов Фев 18, 2016 в 1:09

                  Нормально все у меня. Выдает — /error

                • Андрей Фев 18, 2016 в 1:11

                  Отчего же была ошибка
                  Fatal error: Call to undefined method Exception::get() in /……../error.php on line 7

  • Дмитрий Ноя 27, 2015 в 16:43

    Эта веб-страница содержит бесконечное перенаправление
    Файл error.php переименовывал — возникает стандартная страница

    • Заур Магомедов
      Заур Магомедов Ноя 27, 2015 в 21:44

      Что то не так сделали. Вообще, у этого способа есть недостаток — при ошибках в базе данных к примеру страница ошибки показываться не будет.

  • юЛИЯ Сен 24, 2015 в 11:24

    А у меня все очень круто получилось! Спасибо!!!!

  • Елена Апр 27, 2015 в 17:44

    Мне бы хотелось поставить на свой сайт Джага 404, подскажите можно это установить на джумла 3.1?

    • Заур Магомедов
      Заур Магомедов Апр 27, 2015 в 17:46

      Что за джага 404?

      • Елена Апр 27, 2015 в 18:04

        http://proteys.info/404/ вот можно пример посмотреть

        • Заур Магомедов
          Заур Магомедов Апр 27, 2015 в 18:07

          Ну, флеш-ролик добавили на страницу 404 и все. Что тут такого…

          • Елена Апр 27, 2015 в 18:10

            Если спрашиваю, значит не могу сообразить. Ок, спасибо и за такой ответ.

            • Заур Магомедов
              Заур Магомедов Апр 27, 2015 в 18:17

              А вас чем то мой ответ не устроил?

  • Алексей Мар 16, 2015 в 12:45

    А зачем что то создавать и мудрить вообще ?
    В Joomla 3, в папке с вашим шаблоном уже есть такой файл, все что отображается на 404 странице находится внутри ! Просто меняем этот код на любой другой код HTML и все 😉
    Вуаля

  • Игнат мая 24, 2014 в 0:11

    а как быть с такой ошибкой, например
    вместо http://demo.zaurmag.ru/error.html изменить на http://demo.zaurmag.ru/error.php — просто белый экран
    или http://lysyanka.com/error.htm

    • Заур Магомедов
      Заур Магомедов мая 24, 2014 в 16:01

      А зачем вам … error.php? Чем error.html не нравится?

  • Василий мая 09, 2014 в 22:26

    Все отлично перенаправляет. Только плохо, что отдает ответ сервера 200. Скажите как настроить на данный вариант 404 ошибки ответ сервера 404.

    Подскажите где что прописать…

    • Заур Магомедов
      Заур Магомедов мая 10, 2014 в 15:25

      А зачем вам 404? Когда 200 отдает это хорошо — поисковик не видит 404-х ошибок.

  • Антон Апр 16, 2014 в 12:13

    Заур, Спасибо за статью. Зацените мою 404 страничку lysyanka.com

    • Заур Магомедов
      Заур Магомедов Апр 16, 2014 в 18:29

      А зачем нужны комментарии на 404-ой?

      • Антон Апр 17, 2014 в 9:33

        Пытался убрать, но еще не до конца разобрался с настройками Komento

  • Антон Апр 08, 2014 в 23:12

    Хотел сделать страницу 404 для сайта lysyanka.com
    Использую шаблон yougrids и в корне этого шаблона уже есть файл «error.php»
    Его просто нужно заменить тем файликом который у вас?

    • Заур Магомедов
      Заур Магомедов Апр 08, 2014 в 23:34

      Переименуйте ваш на всякий случай и загрузите мой.

      • Антон Апр 15, 2014 в 18:52

        Сделал так как вы говорили, теперь отображается следующий текст:
        «Эта веб-страница содержит бесконечное перенаправление
        Веб-страница содержит слишком много перенаправлений. Очистка cookies этого сайта или разрешение сторонних cookies, возможно, решит проблему. В противном случае, вероятно, это проблема настроек сервера, а не проблема вашего компьютера.

        • Заур Магомедов
          Заур Магомедов Апр 15, 2014 в 19:16

          Переименуйте файл — error.php и посмотрите вернет ли вам страница стандартную 404-ю joomla. Если нет, то проблема где то в другом.

  • Михаил Ноя 25, 2013 в 0:37

    Сделал все как у вас описано, с первого взгляда все получилось, но когда проверяю ответ сервера на несуществующих урл, показывает: 302 Moved Temporarily. Когда проверяю ответ сервера на несуществующую страницу из вашего сайта, отдает ответ 404… В чем может быть проблема?

  • Умар Окт 20, 2013 в 19:22

    Страница 404 ошибки правильно нужно сделать так, чтобы удержать посетителя на сайте?

    • Заур Магомедов
      Заур Магомедов Окт 20, 2013 в 22:32

      Ну, по сути, да. Просто дело в том, что стандартная страница 404 joomla очень ужасная и отпугивает посетителя.

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Если вы хотите вставить в текст комментария код HTML, CSS, PHP, JavaScript, то обрамите код в соответствии необходимыми тегами:

  • Код HTML - тегами [html] ваш код... [/html]
  • Код CSS - тегами [css] ваш код... [/css]
  • Код PHP - тегами [php] ваш код... [/php]
  • Код JavaScript - тегами [code lang="js"] ваш код... [/code]