Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

404 ошибка на несуществующие элементы каталога

00 голосов
8
Здраствуйте. Очень прошу совета в решении данной задачи. Необходимо выводить страницу 404.php со статусом 404, если элемента в каталоге нет. Т.е. не перенаправлять на эту страницу, а выводить её.
в ini.php написал такой код

Код
AddEventHandler('main', 'OnEpilog', '_Check404Error',1);
function _Check404Error()
{
   if (defined('ERROR_404') && ERROR_404=='Y' && !defined('ADMIN_SECTION'))
   {
      GLOBAL $APPLICATION;
      $APPLICATION->RestartBuffer();
      require $_SERVER['DOCUMENT_ROOT'].'/404.php';
   }
}
 
я так понял, что данное событие реагирует на константу ERROR_404 (её наличие, ну и равенство Y). Тут всё понятно. Не понимаю одного. Где объявлять эту константу, точнее сказать, где прописывать условие, при котором, если элемент не найден, то объявляем константу.
спросил 15 Март, 13 от Bearnas (220 баллов)

8 Ответы

00 голосов
У компонента каталога есть параметр SET_STATUS_404 - "Устанавливать статус 404, если не найдены элемент или раздел". Не то что надо?
ответил 15 Март, 13 от BRENN (1,080 баллов)
00 голосов
Да, об этом я знаю. Но получается, что, когда я эту галочку ставлю, то мне открывается та же страница (с надписью элемент не найден) и статусом 404. Если галочку убрать - визуально изменений не будет, но статус уже будет 200.
Мне же надо, чтобы статус был 404 + открывалась не шаблонная страница, а страница, которая служит для ошибки 404 (в примере выше - это 404.php)
ответил 19 Март, 13 от Bearnas (220 баллов)
00 голосов
Тогда наверно проще всего компонент скопировать и исправить.
ответил 29 Май, 13 от BRENN (1,080 баллов)
00 голосов
Написал простенькое решение:
Код
 <?if (defined("ERROR_404") && ERROR_404==="Y" && (!defined("PAGE_404_PHP") || PAGE_404_PHP!=="Y")) LocalRedirect("/404.php");?>
Подключать это в footer.php (шаблона).
Плюс в файле 404 ошибки (обычно 404.php) объявить константу:
Код
@define("PAGE_404_PHP","Y"); 
И, конечно, поставить галочку в каталоге "Устанавливать статус 404, если не найдены элемент или раздел".
Т.о. если товар или раздел не найден, пользователь попадает на страницу /404.php

То, что нужно?
ответил 26 Авг, 13 от SleepLess (1,220 баллов)
00 голосов
Визуально решение подходит, но из-за LocalRedirect("/404.php"); статус возвращает не 404, а 302
ответил 25 Ноя, 13 от Bearnas (220 баллов)
00 голосов
Сергей, я тоже смотрел в сторону кастомизации компонента, но дело в том, что не знаю, что там надо делать. Как - знаю, а что и где... Уверен, что нужно объявить где-то условие на эту константу.
ответил 06 Март, 14 от Bearnas (220 баллов)
00 голосов
Если вы хотите, чтобы статус 404 устанавливался, если не найден элемент инфоблока, то скопируйте папку
Код
/bitrix/components/bitrix/catalog.element/
в
Код
/bitrix/components/mycomponents/catalog.element/
Там открывайте component.php, и ищите текст ERROR_404 - далее видоизменяете компонент как нужно.
По окончании - где необходимо - измените вызов компонента bitrix:catalog.element на mycomponents:catalog.element.
ответил 27 Июнь, 14 от SleepLess (1,220 баллов)
00 голосов
Спасибо, Денис. Так и сделаю.
ответил 27 Окт, 14 от Bearnas (220 баллов)

Похожие вопросы

0 голосов
0 ответов
0 голосов
0 ответов
0 голосов
2 ответов
спросил 04 Авг, 13 от RoMZeS1k (330 баллов)
0 голосов
8 ответов
спросил 15 Июнь, 13 от PLyToVKa (160 баллов)
0 голосов
0 ответов
спросил 25 Апр, 13 от Kania (5,180 баллов)