1С-Битрикс

404 для несуществующих страниц пагинации в 1С-Битрикс

Поведение пагинации зависит от версии 1С-Битрикс, компонента и его настроек. Пример ниже отражает состояние платформы на момент публикации статьи.

Одна из технических проблем пагинации в 1С-Битрикс возникает, когда запрошенный номер страницы превышает фактическое количество страниц: вместо 404 компонент может показать первую страницу списка. В таком случае для несуществующей страницы нужно явно вернуть HTTP 404. Для этого нам нужно внести правки в двух файлах шаблона компонента, который выводит элементы. Первый файл: result_modifier.php - здесь мы выведем из кэширования некоторые параметры компонента, чтобы отдавались актуальные, а не кэшированные. И второй файл, который не кэшируется в шаблоне: component_epilog.php - в нем мы и будем делать проверки.

result_modifier.php

$arResult['NAV_NUM'] = $arResult['NAV_RESULT']->NavNum;
$arResult['NAV_NUMBER'] = $arResult['NAV_RESULT']->NavPageNomer;

if($arResult['NAV_NUM'] && $arResult['NAV_NUMBER']){
    $cp = $this->__component; // объект компонента

    $cp->SetResultCacheKeys(
        array(
            'NAV_NUM',
            'NAV_NUMBER'
        )
    );

}

component_epilog.php

use Bitrix\Main\Application;

$arGetParams = Application::getInstance()->getContext()->getRequest()->getQueryList()->toArray();

if ($arGetParams["PAGEN_" . $arResult["NAV_NUM"]] > 0 && $arResult["NAV_NUMBER"] != $arGetParams["PAGEN_" . $arResult["NAV_NUM"]])
{
    CHTTP::SetStatus("404 Not Found");
    define('ERROR_404','Y');
	Bitrix\Iblock\Component\Tools::process404(
	       'Не найден', //Сообщение
	       true, // Нужно ли определять 404-ю константу
	       true, // Устанавливать ли статус
	       true, // Показывать ли 404-ю страницу
	       false // Ссылка на отличную от стандартной 404-ю
	);

}

Нужно проверить технические ошибки индексации?
Техническая SEO-оптимизация

Комментарии

0 комментариев

Комментариев пока нет.

Оставить комментарий

Есть проект или задача?

Расскажите, что нужно разработать, доработать или интегрировать. Разберём задачу и предложим следующий шаг.

Обсудить проект