lolitma
Захожу иногда

Репутация: +1/-0
Offline
Сообщений: 22
|
 |
« : 15.09.2011, 15:01:05 » |
|
Для Joomla 1.5 есть такое решение для создания собственной страницы 404:
1. Создать материал, не указывая раздел и категорию. 2. Создать ссылку через меню. После создание ссылки там же в ней посмотреть адрес статьи, например index.php?option=com_content&view=article&id=54 3. В файле error.php, который находится в папке templates/system стереть всё содержимое и вместо этого написать:
<?php defined('JPATH_BASE') or die(); echo file_get_contents(JURI::root().'/index.php?option=com_content&view=article&id=54'); ?>
А как это сделать на Joomla 1.7?
|
|
|
|
|
Записан
|
|
|
|
| |
alp
Захожу иногда

Репутация: +0/-0
Offline
Сообщений: 11
|
 |
« Ответ #1 : 24.10.2011, 11:37:50 » |
|
Если взять за основу способ для J1.5- http://joomlaforum.ru/index.php/topic,113927.0.html можно сделать так: 1. Создаем материал с текстом об ошибке. 2. Создаем меню с ссылкой на этот материал. Например 404.html. Запоминаем эту ссылку. Если используется SEF, то запоминаем SEF-ссылку. Модуль этого меню просто не публикуем, удалять не надо. Меню создается для красоты урла, чтобы не было всяких index.php?bla-bla-bla... 3. Из папки templates/system копируем файл error.php в папку templates/Название_Вашего_шаблона. 4. В файле templates/Название_Вашего_шаблона/templateDetails.xml вписываем перечисление файла error.php. в разделе <files><filename>error.php</filename></files>. 5. Заменяем содержимое нашего файла error.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> </head> <body> <?php if ($this->_error->get('code') == '404') { header("HTTP/1.0 404 Not Found"); header('Location: error404'); exit; } ?> </body> </html> header('Location: 404.html'); - здесь вместо "404.html" пишете адрес своей страницы ошибок, тот который запомнили из меню.
|
|
|
|
« Последнее редактирование: 24.10.2011, 11:43:57 от alp »
|
Записан
|
|
|
|
NightGuard
Moderator
   
Репутация: +361/-7
Offline
Пол: 
Сообщений: 3995
вжжж-вжжж
|
 |
« Ответ #2 : 24.10.2011, 11:40:45 » |
|
А кто мешает сделать 404 на основе того же error.php? Копируете в свой шаблон и все отлично. И любой дизайн и что угодно.
|
|
|
|
|
Записан
|
|
|
|
lolitma
Захожу иногда

Репутация: +1/-0
Offline
Сообщений: 22
|
 |
« Ответ #3 : 05.11.2011, 23:56:55 » |
|
Сделала как Вы посоветовали:
"Если взять за основу способ для J1.5-http://joomlaforum.ru/index.php/topic,113927.0.html можно сделать так:
1. Создаем материал с текстом об ошибке. 2. Создаем меню с..."
Всё получилось. Большое спасибо за помощь.
|
|
|
|
|
Записан
|
|
|
|
abbyevg
Осваиваюсь на форуме
 
Репутация: +6/-0
Offline
Пол: 
Сообщений: 86
эвилпанда
|
 |
« Ответ #4 : 06.11.2011, 01:48:14 » |
|
Предупреждаю, пойдет большая нагрузка на сервер.
|
|
|
|
|
Записан
|
|
|
|
ArSi
Новичок
Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #5 : 07.11.2011, 14:07:01 » |
|
Народ, подскажите как приладить переадресацию на главную при ошибке 404 на J1.7. На J1.5 у меня error.php содержит следующее: <?php
defined( '_JEXEC' ) or die( 'Restricted index access' );
if (($this->error->code) == '404')
{
header("HTTP/1.0 404 Not Found");
header('Location: ' . $this->baseurl . '/');
exit;
}
?> При этом все замечательно работало и при запросе к несуществующей странице, автоматом прекидывало на главную. В 1.7 это не работает, в чем дело? Что изменить в коде, чтоб наладить этот механизм под 1.7? Знатоки, оптимизируйте, пожалуйста, под 1.7.
|
|
|
|
|
Записан
|
|
|
|
AlexSF
Завсегдатай
   
Репутация: +67/-0
Offline
Пол: 
Сообщений: 798
В споре истина рождается
|
 |
« Ответ #6 : 09.11.2011, 16:21:29 » |
|
Если взять за основу способ для J1.5- http://joomlaforum.ru/index.php/topic,113927.0.html можно сделать так: 1. Создаем материал с текстом об ошибке. 2. Создаем меню с ссылкой на этот материал. Например 404.html. Запоминаем эту ссылку. Если используется SEF, то запоминаем SEF-ссылку. Модуль этого меню просто не публикуем, удалять не надо. Меню создается для красоты урла, чтобы не было всяких index.php?bla-bla-bla... 3. Из папки templates/system копируем файл error.php в папку templates/Название_Вашего_шаблона. 4. В файле templates/Название_Вашего_шаблона/templateDetails.xml вписываем перечисление файла error.php. в разделе <files><filename>error.php</filename></files>. 5. Заменяем содержимое нашего файла error.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> </head> <body> <?php if ($this->_error->get('code') == '404') { header("HTTP/1.0 404 Not Found"); header('Location: error404'); exit; } ?> </body> </html> header('Location: 404.html'); - здесь вместо "404.html" пишете адрес своей страницы ошибок, тот который запомнили из меню. сделал по этому методу, но результатом не совсем доволен: HTTP/1.1 302 Moved Temporarily( - это неправильно ) Date: Wed, 09 Nov 2011 12:13:32 GMT Server: Apache mod_bwlimited/1.4 X-Powered-By: PHP/5.2.17 Set-Cookie: a275fb59aa86bc2cf8a23991b0249f52=4ee5c22e4068e8c791f3866a816af816; path=/ Location: /error404.html Cache-Control: max-age=2592000 Expires: Fri, 09 Dec 2011 12:13:32 GMT Vary: Accept-Encoding,User-Agent Content-Encoding: gzip Content-Length: 179 Content-Type: text/html; charset=utf-8
А хотелось бы получить ответ HTTP/1.0 404 Not Found. как можно добиться правильного ответа сервера?
|
|
|
|
« Последнее редактирование: 09.11.2011, 16:32:22 от AlexSF »
|
Записан
|
|
|
|
ArSi
Новичок
Репутация: +0/-0
Offline
Сообщений: 5
|
 |
« Ответ #7 : 11.11.2011, 16:20:53 » |
|
frisian спасибо большое  По-моему, это самое оптимальное решение - попадать на главную, вместо состряпанной статьи 404. Конечно, если не участвуешь в конкурсе "Самая красивая страница 404".
|
|
|
|
|
Записан
|
|
|
|
|
mark1
|
 |
« Ответ #8 : 20.11.2011, 22:52:32 » |
|
А хотелось бы получить ответ HTTP/1.0 404 Not Found. как можно добиться правильного ответа сервера?
А есть одна догадка... Там в рецепте сначала создается модуль, потом он СОХРАНЯЕТСЯ, но НЕ публикуется. Запоминаем ссылочку , и бла-бла бла. Так вот: имхо, Joomla и интерпретирует это 302/как moved temporarily. А если сделать по совету NighGuard, я подозреваю, что будет желанный код 404 =)
|
|
|
|
|
Записан
|
|
|
|
kurandin
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Сообщений: 177
|
 |
« Ответ #9 : 02.12.2011, 17:57:10 » |
|
$code = $this->error->getCode(); $app = & JFactory::getApplication(); if ( $code == 404 ) { $app->redirect($this->baseurl); }
Поясните, куда это вставить?
|
|
|
|
|
Записан
|
|
|
|
|
|
abbyevg
Осваиваюсь на форуме
 
Репутация: +6/-0
Offline
Пол: 
Сообщений: 86
эвилпанда
|
 |
« Ответ #11 : 30.12.2011, 09:49:01 » |
|
Комрады, вы не думали о том, что 404 выдается не только если не найдена конкретная, рассматриваемая вами страница сайта, а если не найдена любая страница, любая мельчайшая картинка или документ, вобщем по любому недоступному пути. При продолжительном существовании сайта такого добра может набраться предостаточно, а поисковики будут приходить и периодически проверять наличие этого всего, тем более, не дай бог, если где-то осталась на это ссылка.
Резюмирую, страница с 404 ошибкой должна быть статической(!) либо ОЧЕНЬ простой и с минимальным набором графики.
|
|
|
|
|
Записан
|
|
|
|
tops974
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 73
|
 |
« Ответ #12 : 30.12.2011, 14:01:07 » |
|
Также можно воспользоваться встроенным компонентом "Перенаправление" и направить станицу 404 на любую нужную вам страницу. Посетитель доволен, А вот только не знаю, как в этом случае с нагрузкой.
|
|
|
|
|
Записан
|
|
|
|
newalex
Осваиваюсь на форуме
 
Репутация: +4/-0
Offline
Сообщений: 42
|
 |
« Ответ #13 : 30.12.2011, 14:17:36 » |
|
Использование "перенаправления" - создает дополнительную нагрузку на базу данных. Т.к. в этом случае он будет "собирать" обрашения от поисковиков и др. и акумулировать все это в базе данных. База при этом наполнится и раздуется. Поэтом использование error.php более правильно!
|
|
|
|
|
Записан
|
|
|
|
tops974
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 73
|
 |
« Ответ #14 : 03.01.2012, 14:59:54 » |
|
Создал пустой файлик error.php, внутри вставил $code = $this->error->getCode(); $app = & JFactory::getApplication(); if ( $code == 404 ) { $app->redirect($this->baseurl); } закинул его в корень шаблона. Перехожу на страницу с 404 ошибкой и на белом фоне строка: $code = $this->error->getCode(); $app = & JFactory::getApplication(); if ( $code == 404 ) { $app->redirect($this->baseurl); } Что я делаю не так? подскажите пожалуйста.
|
|
|
|
|
Записан
|
|
|
|
tops974
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 73
|
 |
« Ответ #15 : 03.01.2012, 16:08:23 » |
|
Почистил кэш, стало работать, но как-то неправильно. Допустим у меня была категория которой сейчас нет, то-есть ошибка 404. Выглядит это так, вставляю урл в браузер Хром site.ru/film/melodrama/ и в ответ вижу это: На этой странице обнаружена циклическая переадресация Веб-страница site.ru/film/melodrama/ привела к избыточному количеству переадресаций. Чтобы устранить эту проблему, можно удалить файлы cookie для этого сайта или разрешить файлы cookie независимых поставщиков. Если проблема сохранится, возможно, она связана с конфигурацией сервера, а не с вашим компьютером. Также в мозилле Неверное перенаправление на странице Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится. Подскажите пожалуйста где у меня может быть ошибка?
|
|
|
|
|
Записан
|
|
|
|
newalex
Осваиваюсь на форуме
 
Репутация: +4/-0
Offline
Сообщений: 42
|
 |
« Ответ #16 : 03.01.2012, 16:24:06 » |
|
такая ошибка с "циклическим".. обычно (если все исправно) возникает если ссылка существует, а станицы или содержания нет.
|
|
|
|
|
Записан
|
|
|
|
strannik-yura
Завсегдатай
   
Репутация: +44/-1
Offline
Пол: 
Сообщений: 537
:)
|
 |
« Ответ #17 : 03.01.2012, 16:28:49 » |
|
мне почему-то кажется, что перенаправленные идёт на не существующий страницу, из-за чего Joomla перекидывает на 404-ю а та в свою очередь на ..... PS могу ошибатся
|
|
|
|
|
Записан
|
|
|
|
newalex
Осваиваюсь на форуме
 
Репутация: +4/-0
Offline
Сообщений: 42
|
 |
« Ответ #18 : 03.01.2012, 16:31:15 » |
|
кстати "перенаправления" надо отключить!
|
|
|
|
|
Записан
|
|
|
|
Abiladenda
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Сообщений: 97
|
 |
« Ответ #19 : 05.01.2012, 23:22:08 » |
|
Но все же как будет правильно, делать 404 страницу и запихивать через файл php шаблона, или отказаться от нее вообще, и сделать так что бы загружалась главная. Я спрашиваю потому как в последней версии zoo 2.5.6, вообще убрали 404, тоесть если сайт только на zoo, без вмешательсва в код, при любом наборе неправильной ссылки перекидывает на главную, интересно почему команда yootheme сделала так, или это глюк в самом zoo, или на моем сайте.
|
|
|
|
|
Записан
|
|
|
|
biosila
Осваиваюсь на форуме
 
Репутация: +2/-0
Offline
Сообщений: 54
|
 |
« Ответ #20 : 13.01.2012, 11:09:37 » |
|
Весе ли верно сделал?: В файле templates\...\error.php заменил код на тот что templates\...\index.php Удалил лишнее( модуль комментариев ) и вставил текст. Теперь при неверном адресе, у меня как и положено открывает страница в стиле шаблона сайта, с тем тестом что я добавил. Просто боюсь, что я что то упустил, и у меня каждая такая страница будет считаться дублем.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #21 : 13.01.2012, 12:47:49 » |
|
Весе ли верно сделал?: В файле templates\...\error.php заменил код на тот что templates\...\index.php
Правильное решение. Теперь получаете ответ сервера 404.
|
|
|
|
|
Записан
|
|
|
|
|
stasyansky
|
 |
« Ответ #22 : 15.01.2012, 16:14:10 » |
|
подскажите, что не так... перевел сервак с виндовс на убунту. PHP 5.3.6 собственно на первом страница ошибки отображалась без проблем. сейчас же просто отображается пустая страница. в логах сервера обнаружил... PHP Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /***/templates/default/error.php on line 4 PHP Warning: file_get_contents(http://***/error404.html): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /***/templates/default/error.php on line 4 в директории шаблона присутствует error.php с содержимым <?php
defined('JPATH_BASE') or die(); echo file_get_contents(JURI::root().'error404.html');
?>
|
|
|
|
« Последнее редактирование: 15.01.2012, 16:51:24 от stasyansky »
|
Записан
|
|
|
|
tops974
Осваиваюсь на форуме
 
Репутация: +5/-0
Offline
Пол: 
Сообщений: 73
|
 |
« Ответ #23 : 20.01.2012, 12:23:27 » |
|
Сделал все как прописано у alpЕсли взять за основу способ для J1.5-http://joomlaforum.ru/index.php/topic,113927.0.html можно сделать так:
1. Создаем материал с текстом об ошибке. 2. Создаем меню с ссылкой на этот материал. Например...... Иду в Яндекс в "Страницы с ошибкой" и перехожу по ссылке. Открывается моя страница с ошибкой: site.ru/component/content/article/2-uncategorised/1054-error-404.html Перехожу по другой ссылке, вот: /film/adventure/181-largo-winch-2 и попадаю также на страницу с ошибкой, но уже прилепленной к ней всеми модулями и т.д, а в адресной строке наблюдаю такой адрес: site.ru/film/adventure/component/content/article/2-uncategorised/1054-error-404.html Компонент "Перенаправление" отключен, категорий с фильмами давно нет. Подскажите пожалуйста в чем дело. Если для наглядности понадобиться, я дам реальные ссылки.
|
|
|
|
|
Записан
|
|
|
|
|
danik.html
|
 |
« Ответ #24 : 03.02.2012, 16:22:59 » |
|
В error.php не обрабатываются вставки <jdoc:include /> - это все портит. Выходит нужно либо редиректить на существующую страницу нормальную, с текстом 404 - ошибка и тд. И при этом отдавать код 404 Not Found - это вообще реально сделать? пытаюсь установить во время редиректа свои заголовки - он устанавливает любые(301 например) кроме нужного 404 - как победить? Хочется нормальной страницы 404 со всеми модулями и тд.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #25 : 03.02.2012, 16:34:43 » |
|
не обрабатываются вставки <jdoc:include /> Генерируйте код и вставляете в файл error.php
|
|
|
|
|
Записан
|
|
|
|
avilin
Новичок
Репутация: +0/-0
Offline
Сообщений: 9
|
 |
« Ответ #26 : 24.02.2012, 09:53:35 » |
|
Озаботился проблемой 404 после включения ЧПУ. Т.к. поисковики стали отправлять на старые адреса страниц, траф упал в 4 раза. Сделал все по этой инструкции: http://webmastermix.ru/lessons-joomla/134-stranitsa-oshibki-404-v-joomla.htmlЗа исключением одного: после кода "<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">" вставил новый код удалив только следующую строчку файла error.php. В инструкции же написано, что удалять надо ВСЕ, что находится ниже данной строки. В итоге получилась ошибка 404 на которой отображается главная страница сайта, а текст ошибки появляется в подвале: http://www.ros-door.ru/blablablaМеня это устраивает, а вопрос в том, какие минусы могут быть у такого метода?
|
|
|
|
|
Записан
|
|
|
|
noname-dev
Давно я тут
  
Репутация: +17/-0
Offline
Пол: 
Сообщений: 289
|
 |
« Ответ #27 : 24.02.2012, 10:33:31 » |
|
Народ, подскажите как приладить переадресацию на главную при ошибке 404 на J1.7. На J1.5 у меня error.php содержит следующее:
При этом все замечательно работало и при запросе к несуществующей странице, автоматом прекидывало на главную. В 1.7 это не работает, в чем дело? Что изменить в коде, чтоб наладить этот механизм под 1.7? Знатоки, оптимизируйте, пожалуйста, под 1.7.
Знатоки никогда такого не делают, а именно редирект с 404 на главную, это очень и очень плохо.
|
|
|
|
|
Записан
|
|
|
|
NightGuard
Moderator
   
Репутация: +361/-7
Offline
Пол: 
Сообщений: 3995
вжжж-вжжж
|
 |
« Ответ #28 : 31.03.2012, 12:56:18 » |
|
В error.php не обрабатываются вставки <jdoc:include /> - это все портит. Выходит нужно либо редиректить на существующую страницу нормальную, с текстом 404 - ошибка и тд. И при этом отдавать код 404 Not Found - это вообще реально сделать? пытаюсь установить во время редиректа свои заголовки - он устанавливает любые(301 например) кроме нужного 404 - как победить? Хочется нормальной страницы 404 со всеми модулями и тд.
Да, <jdoc:include /> не обрабатывается, но модули вызывать можно.
|
|
|
|
|
Записан
|
|
|
|
lubitel3
Осваиваюсь на форуме
 
Репутация: +0/-0
Offline
Сообщений: 25
|
 |
« Ответ #29 : 18.04.2012, 15:15:45 » |
|
Воспользовался советом 3-го поста (NightGuard). Всё просто отлично и не надо городить огород, ведь есть готовые решения, просто нужно подправить под себя и будет вам счастье...
|
|
|
|
|
Записан
|
|
|
|
|