Очень часто сео-специалисты ставят задачу как можно сильнее упростить адрес до карточки товара и до карточки раздела и как результат мы получаем шаблон адреса вида: /раздел/ и /товар/. В таком случае типовой компонент catalog при включенном режиме отдачи 404-й ошибки, будет выдавать ошибку. Чтобы этого избежать, нужно вносить правки в логику отображения.
Для начала отключаем режим показа 404-й страницы в настройках компонента каталога.
Далее, открываем файл section.php каталога и тут настраиваем свой код определения того, какую страницу показывать - страницу товара или страницу раздела - проверяем по базе данных, если есть товар с заданным символьным кодом - показываем карточку товара. Если товара нет, но есть раздел с таким символьным кодом - показываем его. Если же ни товара, ни раздела с заданным символьным кодом нет - нужно показать 404-ю страницу. Для этого можно воспользоваться следующим кодом:
if (!defined("ERROR_404")) define("ERROR_404", "Y"); \CHTTP::setStatus("404 Not Found"); if ($APPLICATION->RestartWorkarea()) { require(\Bitrix\Main\Application::getDocumentRoot() . "/404.php"); die(); }
В результате пользователю будет показана 404-я страница. Адрес при этом не изменится.
2019-02-28. Решение, используемое в ядре системных компонентов:
Bitrix\Iblock\Component\Tools::process404( 'Не найден', //Сообщение true, // Нужно ли определять 404-ю константу true, // Устанавливать ли статус true, // Показывать ли 404-ю страницу false // Ссылка на отличную от стандартной 404-ю );
Типовой каркас 404-й страницы:
<? include_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/urlrewrite.php'); CHTTP::SetStatus("404 Not Found"); @define("ERROR_404", "Y"); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php"); $APPLICATION->SetTitle("Страница не найдена"); $APPLICATION->SetPageProperty("keywords", "Страница не найдена"); $APPLICATION->SetPageProperty("description", "Страница не найдена"); ?> <div class="container-error-page"> <div class="error-page-big-text"> 404 </div> <div class="col col-12 ta-center"> <?$APPLICATION->IncludeComponent( "bitrix:search.form", "bottom", array( "COMPONENT_TEMPLATE" => "bottom", "PAGE" => SITE_DIR."search/index.php" ), false );?> </div> <p> <a href="/">Главная страница</a> </p> <p> <a href="search/map.php">Карта сайта</a> </p> </div> <? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.