По запросу "Элемент не найден" в поиске на форуме, выдаётся 5 страниц с информацией, о попытках решить проблему этого пятого элемента, но почти ничего конкретного. Есть пара топиков, на которых хотелось бы остановиться, это - http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic26823/message147994/#message147994 и http://dev.1c-bitrix.ru/community/forums/messages/forum7/topic25815/message142924/#message142924. Андрей Шилов, вопрос к Вам, удалось ли придумать третий вариант, с сохранением ссылки в адресной строке браузера? Предлагаю здесь, все-таки, добить трабл с этим элементом и для начала выложить подправленный component.php компонента catalog.element, а потом уже можно и в виде своего компонента это дело реализовать, раз битриксы сами не могли это дело решить Для чего существует и как работает галка "Устанавливать статус 404, если не найдены элемент или раздел" кто-нибудь может объяснить?! Техподдержка, в лице Евгения Кобзаря, в этой ситуации рекомендует покурить мануал с цветными картинками а-ля "Учебный курс по работе с компонентами: http://www.1c-bitrix.ru/learning/course/index.php?COURSE_ID=18" и не более.
Итак, ТЗ: необходимо кастомизировать component.php компонента catalog.element таким образом, чтобы вместо фразы "Элемент не найден", выводился результат работы 404.php, при этом в адресной строке сохранялась ссылка, т.е. не было редиректа, ну и чтобы браузер возвращал 404 ошибку.
Т.е. вместо конкретной фразы "элемент не найден" или вообще вместо всей страницы целиком показывалось бы содержание 404.php с сохранением адреса в строке?
Опишу наиболее простой и универсальный вариант решения вашей проблемы: т.к. компоненты устанавливают константу ERROR_404, то в футере шаблона сайта вы ее можете проверить и вывести нужный вам 404.php. И не надо никаких переделываний компонентов.
Задача. При обращении к несуществующему элементу (?ELEMENT_ID=666), необходимо, чтобы вместо фразы "Элемент не найден", выводился результат работы 404.php скрипта. При этом в адресной строке сохранялась ссылка обращения к этому элементу (т.е. не было редиректа "header ('Location: /404.php');"), ну и чтобы браузер возвращал 404 ошибку.
Решение. В файле /bitrix/php_interface/init.php прописываем следующий код:
Код
AddEventHandler('main', 'OnEpilog', '_Check404Error',1);
function _Check404Error()
{
if (defined("ERROR_404") && ERROR_404=="Y")
{
global $APPLICATION;
$APPLICATION->RestartBuffer();
include $_SERVER['DOCUMENT_ROOT']."/bitrix/templates/".SITE_TEMPLATE_ID."/header.php";
require ($_SERVER["DOCUMENT_ROOT"]."/404.php");
include $_SERVER['DOCUMENT_ROOT']."/bitrix/templates/".SITE_TEMPLATE_ID."/footer.php";
}
}
з.ы. Dmitry Ban, Вы писали, что данное решение Вам не нравится. Почему можете сказать? з.ы.ы. Андрей Шилов, кажется, что это, как раз, третий вариант, который Вы тоже искали.
При обращении к несуществующему элементу (?ELEMENT_ID=666), необходимо, чтобы вместо фразы "Элемент не найден", выводился результат работы 404.php скрипта. При этом в адресной строке сохранялась ссылка обращения к этому элементу (т.е. не было редиректа "header ('Location: /404.php');"), ну и чтобы браузер возвращал 404 ошибку.
Решение.
В файле /bitrix/php_interface/init.php прописываем следующий код:
з.ы. Dmitry Ban, Вы писали, что данное решение Вам не нравится. Почему можете сказать?
з.ы.ы. Андрей Шилов, кажется, что это, как раз, третий вариант, который Вы тоже искали.
такой вариант делал, но отказался от него. Проблема в том, что header уже подключен, а мы пытаемся подключить его второй раз. А часто бывает, что какие то блоки из Хидера не нужно отображать на странице 404 и возникает проблема как сказать битриксу что мы перешли на 404 и отключить ненужный блок. Поэтому история с 404 ошибкой пока для меня решена LocalRedirect'том вместо require($_SERVER["DOCUMENT_ROOT"]."/404.php");
если у вас статичная страница 404-ая, если нет никаких компонентов, карты сайта или формы поиска, а просто надпись или картинка, то можно просто создать отдельный статический файл с html и выводить его содержимо виесто надписи элемент не найден, раздел не найден и т.д. и ставить статус страницы в 404.
Минусы в том что если править надо будет, то 2 файла и как я уже сказал информация на странице статична.