Блог

Умный фильтр с ЧПУ в корне каталога товаров

15 ноября 2025

Данная реализация позволит сохранить обновляемость шаблона каталога товаров "bitrix:catalog","main" в Аспро: Лайтшоп.

1. Создаем правило обработки адресов для фильтра товаров с ЧПУ:

1 => array(
'CONDITION' => '#^/catalog/filter/(.+)/apply/#',
'RULE' => 'SMART_FILTER_PATH=$1&',
'PATH' => '/catalog/index.php',
'SORT' => 90
),

В вашем файле urlrewrite.php ключ "1" может быть занят - тогда используйте другой. 
В регулярном выражении используем (.+), чтобы все символы были допустимы, в том числе кириллица.

2. Перед вызовом каталога товаров "bitrix:catalog" настраиваем управление адресами страниц и поведение 404-й ошибки:

if (!empty($_REQUEST['SMART_FILTER_PATH']))
{
	$SET_STATUS_404 = 'N';
$SHOW_404 = 'N';
$SEF_URL_TEMPLATES = [
'sections' => '',
'section' => '',
'element' => '#ELEMENT_CODE#/',
'compare' => 'compare.php?action=#ACTION_CODE#',
'smart_filter' => '/catalog/filter/#SMART_FILTER_PATH#/apply/',
]; } else { $SET_STATUS_404 = 'Y'; $SHOW_404 = 'Y'; $SEF_URL_TEMPLATES = [ 'sections' => '', 'section' => '#SECTION_CODE_PATH#/', 'element' => '#SECTION_CODE_PATH#/#ELEMENT_CODE#/', 'compare' => 'compare.php?action=#ACTION_CODE#', 'smart_filter' => '#SECTION_CODE_PATH#/filter/#SMART_FILTER_PATH#/apply/', ]; }

3. Ниже, в параметрах вызова компонента, прописываем определённые выше переменные:

$APPLICATION->IncludeComponent(
    "bitrix:catalog",
    "main",
    Array(
        ...
        "SET_STATUS_404" => $SET_STATUS_404,
"SHOW_404" => $SHOW_404,
"SEF_URL_TEMPLATES" => $SEF_URL_TEMPLATES, ... ) );

4. В папке с шаблоном каталога товаров .../catalog/main/ в подпапке page_blocks создаём файл sections_1_custom.php с таким содержимым:

// Чтобы всё заработало, подключаем языковой файл для section.php, т. к. в sections.php нет некоторых названий нужных полей.
Bitrix\Main\Localization\Loc::loadMessages($_SERVER['DOCUMENT_ROOT'].$templateFolder.'/section.php');

// Чтобы подключился нужный шаблон фильтра.
$arParams['FILTER_VIEW'] = 'COMPACT';

// Чтобы ссылки на товары были рабочими.
$arResult['URL_TEMPLATES']['element'] = '#SECTION_CODE_PATH#/#ELEMENT_CODE#/';

// Чтобы заработал умный фильтр.
$arResult['URL_TEMPLATES']['smart_filter'] = 'filter/#SMART_FILTER_PATH#/apply/';
$arResult['VARIABLES']['SMART_FILTER_PATH'] = htmlspecialcharsbx($_REQUEST['SMART_FILTER_PATH']);
$arElementFilter['INCLUDE_SUBSECTIONS'] = 'Y';
$arElementFilter['SECTION_GLOBAL_ACTIVE'] = 'Y';
$arElementFilter['SECTION_ACTIVE '] = 'Y';

// Подключение списка элементов.
$bContolAjax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' && isset($_GET['control_ajax']) && $_GET['control_ajax'] == 'Y');
$sViewElementTemplate = ($arParams['SECTION_ELEMENTS_TYPE_VIEW'] == 'FROM_MODULE' ? $arTheme['ELEMENTS_CATALOG_PAGE']['VALUE'] : $arParams['SECTION_ELEMENTS_TYPE_VIEW']);
?>
<div class="js_wrapper_items<?= $arTheme['LAZYLOAD_BLOCK_CATALOG']['VALUE'] == 'Y' ? ' with-load-block' : ''; ?>" >
<div class="js-load-wrapper <?=$APPLICATION->ShowViewContent('section_additional_class'); ?>">
<?if($bContolAjax):?>
<?$APPLICATION->RestartBuffer(); ?>
<?endif; ?>

<?@include_once $sViewElementTemplate.'.php'; ?>

<?if($bContolAjax):?>
<?exit; ?>
<?endif; ?>
</div>
</div>
<?$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH.'/js/jquery.history.js'); ?>
<?
// Подключаем необходимые библиотеки.
TSolution\Extensions::init(['filter_panel', 'dropdown_select', 'smart_filter', 'order-info']);

Файл надо создать в обоих шаблонах сайта: для компьютеров и для мобильных. В шаблоне для мобильных в этом файле подключаем другой список библиотек:

TSolution\Extensions::init(['filter_panel', 'order-info']);

5. В настройках Аспро, в параметре "Шаблон списка разделов" выбираем sections_1_custom:

Шаблон списка разделов

6. Делаем полную очистку файлов кэша на сайте.

После этого в корне каталога товаров заработает умный фильтр с ЧПУ.

Битрикс Просмотров: 5
Категории: