Предварительные требования
-
Изучите официальную документацию по работе с комплексным компонентом каталога
-
Поэкспериментируйте с параметрами URL в режиме ЧПУ для понимания механизма роутинга
Модификация компонента sections.php
Ключевые изменения в логике:
<?php
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
"",
array(
// ...
"SECTION_ID" => 0,
"SEF_MODE" => $arParams["SEF_MODE"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
// ключевые места
"SEF_RULE" => '/catalog/filter/#SMART_FILTER_PATH#/apply/',
"SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"],
'SHOW_ALL_WO_SECTION'=>'Y',
),
$component,
array('HIDE_ICONS' => 'Y')
);
$intSectionID = $APPLICATION->IncludeComponent(
"bitrix:catalog.section",
"",
[
// ...
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"INCLUDE_SUBSECTIONS" => 'Y',
"SECTION_ID" => 0, // Игнорирование привязки к разделу
"SHOW_ALL_WO_SECTION" => 'Y'
]
);
Настройка маршрутизации (urlrewrite.php)
Правила преобразования URL:
array(
// Обработка URL фильтра
6 => array(
'CONDITION' => '#^/catalog/filter/(?<path>.+?)/apply/#',
'RULE' => 'SMART_FILTER_PATH=${path}',
'PATH' => '/catalog/index.php',
'SORT' => 90
),
// Базовый маршрут каталога
7 => array(
'CONDITION' => '#^/catalog/#',
'ID' => 'bitrix:catalog',
'PATH' => '/catalog/index.php',
'SORT' => 100
)
)
Принцип работы системы
1. Генерация URL фильтра:
-
Компонент
catalog.smart.filterформирует URL по шаблону:/catalog/filter/{FILTER_PARAMS}/apply/ -
{FILTER_PARAMS}- URL-кодированная строка параметров фильтрации
2. Обработка запроса:
-
Фильтр ожидает в параметр
SMART_FILTER_PATHполучить ТОЛЬКО строку с фильтраминапример из строки
/catalog/filter/osnovnaya_vstavka-is-422fa41b-04fb-11df-aba7-0030672b49c2/apply/нам нужна лишь эта частьosnovnaya_vstavka-is-422fa41b-04fb-11df-aba7-0030672b49c2 -
В ЧПУ (SEF_RULE) это выглядит так
"SEF_RULE" => '/catalog/filter/#SMART_FILTER_PATH#/apply/', -
Правило #6 извлекает параметр
SMART_FILTER_PATHиз URI (см. п. выше) -
Редирект на
/catalog/index.phpс передачей параметров:$_REQUEST['SMART_FILTER_PATH'] = 'filter1/value1/filter2/value2'
3. Обработка в компоненте:
-
Параметр
SHOW_ALL_WO_SECTION = 'Y'отключает привязку к конкретному разделу -
INCLUDE_SUBSECTIONS = 'Y'включает элементы всех подразделов -
SECTION_ID = 0исключает фильтрацию по ID раздела
Архитектурные особенности
-
Приоритетность правил маршрутизации:
- Сортировка (SORT) гарантирует (не факт, но должно) приоритетную обработку фильтров (90) перед общим правилом каталога (100)
-
Нормализация параметров:
-
Регулярное выражение
(.+?)захватывает многоуровневые параметры фильтра -
Экранирование слэшей через URL-кодирование
-
-
Оптимизация выборки данных:
- Использование
CACHE_GROUPS = $arParams["CACHE_GROUPS"]для разделения кеша по группам пользователей
- Использование