Кастомная страница 404 в Joomla 2.5Опубликовано: 27.08.2013 19:34 Автор: Ogri Просмотров: 18500
Тема, вынесенная в заголовок статьи, вроде бы описана и обсуждена в сети множество раз. И тем не менее, как это зачастую бывает, информация в каждом источнике неполна. Общая картина складывается из разрозненных сведений, а некоторые частные глюки, с которыми мне пришлось столкнуться, не освещены вообще, - по крайней мере, я такового освещения не нашел и придумал свое решение. Поэтому цель данной статьи (как и всех прочих) - собрать воедино инфу из инета, структурировать, дополнить собственным опытом и передать на суд сетевой общественности.
Дефолтная джумловская страница 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-теги
Популярные
-
60478
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
43322
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
42802
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
32968
Единая фильтрация вывода модуля mod_jcomments_latest -
30733
Joomla: как добавить свои языковые константы или переопределить существующие
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments
-
79.Ernorvious.com 26.01.2023 21:36
%% Look at my blog post ... Entrepreneurship (79.Ernorvious.com ...
-
-
Joomla: Сливаем два сайта в один при помощи компонента J2XML
-
quilt 26.01.2023 21:26
%% my web site - quilt: http://51.75.160.67/ticket/177210
-
nikpayam.Com 26.01.2023 21:25
%% my web page - cerebral palsy attorney (nikpayam.Com: https://nikpayam.com/author/reubengodle/)
-
birth defect case 26.01.2023 21:22
%% Also visit my web page - birth defect case: https://www.punterforum.it/profile.php?id=882402
-
-
Кнопки социальных сетей в Joomla 2.5
-
Blogfreely.net 26.01.2023 21:36
При продвижении ресурса в США необходимо использовать не только ВЧ ключевые запросы, но также и СЧ и ...
-
-
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments
-
Repairing Glass 26.01.2023 21:26
%% Feel free to visit my web page :: Repairing Glass ...
-
-
Структура внутренних ссылок сайта на Joomla
-
만세마사지 26.01.2023 21:25
It's an amazing paragraph in favor of all the internet users; they will obtain benefit from it I ...
-
Cbd Rutland 26.01.2023 21:25
%% Here is my page Cbd Rutland ...
-
-
Цифровые коды WEB (веб) цветов для сайта
-
Matt 26.01.2023 21:35
Thank you, I have just been looking for information about this subject for a while and yours is ...
-
Malpractice Claim 26.01.2023 21:34
%% Feel free to visit my web blog :: Malpractice Claim ...
-
Комментарии
Когда вы попадаете на страницу 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/
It was definitely informative. Your website is very helpful.
Thank you for sharing!
Also visit my web-site - fq - Mitchel,
They are very convincing and will definitely work. Nonetheless, the posts are very quick for
newbies. May just you please extend them a little from next time?
Thank you for the post.
this information.
Keep up the good work! You understand, many individuals are
looking round for this information, you could help them greatly.
I've a venture that I'm just now working on, and I've been at the glance out for such information.
for a blog site? The account aided me a acceptable deal.
I had been a little bit acquainted of this your broadcast offered bright clear idea
And he actually bought me lunch due to the fact that I discovered it for him...
lol. So let me reword this.... Thank YOU for the meal!!
But yeah, thanks for spending time to discuss this topic here on your internet
site.
Here is my web page :: Call Girls in lahore
Is this a paid theme or did you customize it yourself?
Anyway keep up the excellent quality writing, it is rare to see a great
blog like this one nowadays.
my site: escorts in islamabad
your won blog.
my web site call girls in Lahore