ADBLOCK_MSG
Кастомная страница 404 в Joomla 2.5Опубликовано: 27.08.2013, 19:34 Автор: Ogri Просмотров: 21106
Тема, вынесенная в заголовок статьи, вроде бы описана и обсуждена в сети множество раз. И тем не менее, как это зачастую бывает, информация в каждом источнике неполна. Общая картина складывается из разрозненных сведений, а некоторые частные глюки, с которыми мне пришлось столкнуться, не освещены вообще, - по крайней мере, я такового освещения не нашел и придумал свое решение. Поэтому цель данной статьи (как и всех прочих) - собрать воедино инфу из инета, структурировать, дополнить собственным опытом и передать на суд сетевой общественности.
Дефолтная джумловская страница 404 не вписана в шаблон и загромождена кучей малоинтересной для посетителя технической информации:
Единственная ссылка на домашнюю страницу может даже не броситься в глаза. Заблудший гость с матами закрывает ваш сайт, фактически на нем не побывав. Нужно немедленно исправить этот балаган.
Цель: создать информативную страницу (в случае мультиязычности - для каждого из языков), сохранив структуру сайта, но при этом сделать ее отдельной - убрать навигацию Предыдущая - Следующая, не выводить хлебные крошки, кнопки соцсетей, но оставить комментарии. Также убираем всю инфу об авторе, дате создания, количестве просмотров (последнюю - особенно! ;)). При этом в адресной строке должен оставаться неверный адрес, вбитый посетителем.
К слову, некто Артемий Лебедев настаивает, что, цитирую, "нельзя допускать, чтобы несуществующую страницу путали с обычной. Поэтому на странице с ошибкой не должно быть основного меню сайта, верстки и цветов типовой страницы". Ну, не знаю. Можно, конечно, отвязать модуль главного меню по тому же принципу, что описан здесь для модуля навигатора, а также соорудить отдельный шаблон для страницы ошибки. Я предпочел этого не делать, поэтому в дальнейшем останавливаться на этом не буду.
Итак, перейдем к процессу. Отмечу лишь, что, как автор двуязычного сайта на момент написания (а в дальнейшем не исключаю добавления новых языков), код страницы ошибки я сваял с учетом многоязычности. Описывать процесс буду только для одного языка (в моем примере - русского), для возможных остальных он должен быть просто повторен с заменой суффикса ru
на соответствующий.
Поэтапно и пошагово:
Этап 1: Создание и подключение страниц 404 для каждого языка сайта.
- Создаем категорию
404-ru
. Язык категории, соответственно - Русский. Сохраняем. - Создаем новый материал. Название на каждом из языков можно задавать просто
404
, разниться они будут идентификаторами материалов. Категорию для данного выбираем404-ru
. Язык - опять же Русский. В текст материала вносим симпатичное и информативное содержимое, создать которое вам помогает ваша креативная фантазия. Во вкладке Параметры отображения материала | Article Options - скрываем все, что можно: - Жмем Сохранить | Save. Генерируется ID материала - запоминаем его:
- Редактируем джумловский файл ошибки 404. Его расположение:
[корень_сайта]\templates\system\error.php
. Удаляем содержимое файла и копируем в него следующий код:
<?php defined('_JEXEC') or die; $errpages_by_lang = array( array('language'=>'ru-Ru', 'lang'=>'ru', 'page'=>'80'), array('language'=>'en-Gb', 'lang'=>'en', 'page'=>'448') ); $cur_language = JFactory::getDocument()->language; $sef_is_on = &JFactory::getConfig()->sef == 1; for ($i=0, $n=sizeof($errpages_by_lang); $i<$n; $i++) { if (strtolower($errpages_by_lang[$i]['language']) == strtolower($cur_language) || $i == $n-1) { if ($sef_is_on) echo file_get_contents(JURI::root().$errpages_by_lang[$i]['lang'].'/'.$errpages_by_lang[$i]['page']); else echo file_get_contents(JURI::root().'index.php?option=com_content&view=article&id='.$errpages_by_lang[$i]['page'].'&lang='.$errpages_by_lang[$i]['lang']); break; } } ?>
Ключ 'page'
в массиве каждого языка содержит ID материала. Заменяете в нем мой (80) на ваш, запомненный на предыдущем этапе. Остановлюсь подробнее, какие значения присваиваются ключам 'language'
и 'lang'
. Идем в меню Расширения | Extensions -> Менеджер языков | Language Manager -> Языки контента | Content. Там кликаем на соответствующий язык, открывая тем самым страницу редактирования языка. В типичном виде она выглядит так:
Из нее и заполняем массив. Ключ 'language'
принимает значение параметра Тег языка | Language Tag, 'lang'
соответствует параметру Код языка для URL | URL Language Code. При необходимости отредактируйте значения этих двух ключей для каждого языка в соответствии с вашими настройками.
Сохраняем изменения в файле error.php
. Если сайт одноязычный - следующий пункт пропускайте.
- Повторяем все вышеописанные действия для остальных языков сайта. При этом, чтобы не выставлять настройки по-новой, удобно воспользоваться опцией копирования материалов:
Редактирование файла ошибки, понятно, включает теперь только добавление (или изменение) массива нового языка как элемента массива языков и редактирование ключей. 448 - ID моей английской страницы 404, меняете как и прежде на свой. Ну и с тегами языка соответственно.
Итак, страницы 404 для всех языков сайта созданы и подключены. Для тестирования наберем в адресной строке проводника что-нибудь вроде http://ogri.me/несуществующая страница. Редирект на нашу кастомную страницу ошибки работает. Переходим к следующему этапу.
Этап 2: Настройка интерфейса страниц 404.
- Навигации нет как класса, поскольку наш материал - единственный в категории. Но вот хлебные крошки здесь абсолютно ни к чему. Как убрать их с определенной страницы, подробно описано в статье Joomla 2.5: Убираем хлебные крошки с выбранных страниц как раз на примере страницы ошибки 404.
- Оставить ли кнопки социальных сетей - каждый решает для себя сам. Возможно, вы сделаете настолько красивую 404-ю страницу, что восторженный посетитель захочет запостить линк на нее как на образец. Я же предпочитаю убрать и их, чтобы заблудившийся читатель моего ресурса не задерживался здесь, а поскорее переходил к основному контенту. Поскольку, как я уже писал, я встраиваю соцкнопки ручками, так же ручками я их выборочно отключаю. Методика описана в статье Кнопки социальных сетей в Joomla 2.5. Выборочное размещение. Кто использует плагины от сторонних производителей, должен найти в них соответствующую опцию (буде таковая есть) или влезть в код и внести свои изменения.
- А вот комментарии подключить, на мой взгляд, полезно. В тексте страницы также можно предложить промахнувшемуся страницей путешественнику высказать в них свое "фе". В JComments - просто добавляем категории 404-ru и 404-en раздельно по языкам в список Настройки | Settings -> Общие | General -> Категории | Categories -> Включить комментарии в категориях | Choose categories for JComments to work in. Как в других компонентах комментариев - не знаю, не пользовался и не планирую: JComments - однозначно лучший.
Теперь отдельно - об одном неприятном моменте, с которым я столкнулся во время тестирования, и упоминание о котором не встречал в статьях на данную тему. Если в неверном адресе страницы присутствует одинарная кавычка, вылетает Fatal error типа "Неотработанное исключение". Возможно, в новых версиях Джумлы это поправят, а пока пришлось вставить костыль, благо сообщение о фатальной ошибке вполне информативно и наводит на файл (\libraries\joomla\environment\uri.php
) и номер строки в нем (194), где собака порылась. Открываем файл на редактирование, находим следующий фрагмент кода:
// Check for quotes in the URL to prevent injections through the Host header if ($theURI !== str_replace(array("'", '"', '<', '>'), '', $theURI)) { throw new InvalidArgumentException('Invalid URI detected.'); }
Из него ясно, что в случае, когда URL включает одинарные или двойные кавычки, а также символы < или >, обрамляющие теги в маркапе HTML, генерируется то самое исключение. При этом, когда я пробовал вбивать ", < или >, меня вообще выбрасывало в Error 403 - Access forbidden. Я заменил вышеприведенный кусок кода на единственную строку:
$theURI = str_replace(array("'", '"', '<', '>'), '', $theURI);
То есть вместо проверки на вредные символы и выбрасывания исключения просто удалил их из адреса. Теперь даже при наличии их в URL откроется наша кастомная 404-я страница. При этом в адресной строке браузера всё введенное пользователем остается без изменения, что хорошо: он даже не догадывается о наших манипуляциях.
Вот теперь созданная и настроенная страница 404 приняла божеский вид. Промазавший по клавише или перешедший по мертвой ссылке посетитель не чувствует себя заблудившимся, а ваш сайт имеет все шансы заманить его на свои просторы. Главное теперь, чтобы информация на этих просторах была интересной и познавательной. Ну, тут уж вам и карты в руки.
Новые
-
20.07.2020, 00:53
Joomla 3: Перенаправление на ту же страницу после авторизации -
13.02.2017, 14:09
Joomla: как добавить свои языковые константы или переопределить существующие -
13.02.2017, 13:23
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
23.06.2016, 10:48
Единая фильтрация вывода модуля mod_jcomments_latest -
13.09.2015, 13:06
Постим иллюстрированные статьи Joomla-сайта на Facebook, используя OG-теги
Популярные
-
117236
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
86622
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
63659
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
59533
Joomla: как добавить свои языковые константы или переопределить существующие -
44310
Цифровые коды WEB (веб) цветов для сайта
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments
-
Тест
25.08.2020 11:37
Не выводит сообщение об ошибке, если галку не нажать в рекапче
-
Николай3333
05.08.2020 07:55
Неужели работает?
-
Дарья Смирнова
29.07.2020 06:02
Здравствуйте, все вроде сделала по инструкции, но точно так же никаких изменений. Разве что теперь ...
-
ТвойБро
24.03.2020 03:42
Огромное спасибо, помогло. Странно, что по дефолту в jcomments предлагает в настройках выбрать ...
-
Валерий
21.02.2020 03:25
Проверка
-
Денис
02.01.2020 21:21
УРАААА! Заработало после очистки кэша сайта! Спасибо!
-
Денис
02.01.2020 20:56
Забыл сказать, что этот вариант установился на сайт, но по-прежнему при использовании reCAPTCHA ...
-
Вованя
25.12.2019 18:31
12345
-
Вованя
25.12.2019 18:31
Проверка, просто проверяю. раз раз раз)
-
Тест
25.08.2020 11:37
-
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments
-
Андрей67
11.08.2020 16:54
У меня такая же картина, нет кнопки Импорт. как быть?
-
Андрей67
11.08.2020 16:54
Комментарии
Когда вы попадаете на страницу 404, и не уходя с нее пытаетесь авторизоваться на сайте, выдается ошибка "Неверный параметр" на белом экране.
Как решить эту ошибку?
(На вашем сайте она тоже есть.)
Я просто скопировал главную страницу в файл error.php, получилось сообщение об ошибке не нарушая общий вид сайта, можно посмотреть: http://sohranay.ru или http://stroydostavka54.ru
Вы ипользуете Joomla 2.5.6 сейчас, когда последний билд второй с половиной Джумлы - 2.5.28 (и он последний во всех смыслах - разработка и поддержка 2.5 прекращены с декабря прошлого года). Значит, вы не обновляетесь. Понятно, что почти в каждом обновлении разработчики, исправляя старые баги, вносят новые, зачастую еще более жестокие. В 2.5.17 они напортачили с роутером и не исправляли в нескольких следующих. После обновлений приходилось возвращать роутер из 2.5.16, иначе сбивались многие ссылки. Обновления - головняк тот еще, но без них еще хуже: уязвимости в безопасности старых версий давно известны, трояны, их использующие, толпами кишат в Сети. Рано или поздно вас хакнут, как дважды хакнули меня в свое время.
Я бы на вашем месте обновился как минимум до 2.5.28, а как максимум - перешел бы на третью Джумлу. В Инете полно информации на эту тему, я сам сейчас готовлю статью по миграции с 2.5 на последний билд тройки. Попробуйте для начала 2.5.28. Естественно, прежде чем переносить изменения на реальный хостинг, тестируйте тщательно на локальном.
Предложенное решение отлично работает.
Спасибо!
Но, столкнулся с одной проблемкой - как настроить тайтл этой страницы?
Joomla 3.4.3
http://restoraneva.ru/