Битрикс умный фильтр, catalog.smart.filter в корень каталога

Предварительные требования

  1. Изучите официальную документацию по работе с комплексным компонентом каталога

  2. Поэкспериментируйте с параметрами 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 раздела


Архитектурные особенности

  1. Приоритетность правил маршрутизации:

    • Сортировка (SORT) гарантирует (не факт, но должно) приоритетную обработку фильтров (90) перед общим правилом каталога (100)
  2. Нормализация параметров:

    • Регулярное выражение (.+?) захватывает многоуровневые параметры фильтра

    • Экранирование слэшей через URL-кодирование

  3. Оптимизация выборки данных:

    • Использование CACHE_GROUPS = $arParams["CACHE_GROUPS"] для разделения кеша по группам пользователей