Главная » Блог разработчиков » Работа умного фильтра с ЧПУ в корне каталога

Работа умного фильтра с ЧПУ в корне каталога


Умный фильтр (bitrix:catalog.smart.filter) работает и в корне каталога, без указания раздела. Для этого надо добавить в параметры фильтра «SHOW_ALL_WO_SECTION» => «Y».
Однако, такой вариант работает только без ЧПУ. Исправим это.

В параметрах компонента bitrix:catalog ЧПУ фильтра выглядит, например, так
#SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/
Сначала сделаем, чтобы ЧПУ для корня каталога формировалось правильно, без раздела. В файле sections.php компонента catalog в параметрах  bitrix:catalog.smart.filter заменяем
"SEF_RULE" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["smart_filter"]
на
"SEF_RULE" => "/catalog/filter/#SMART_FILTER_PATH#/apply/"
Теперь url формируется правильно, но в фильтр выбранные свойств не видит.
Это происходит потому, что переменная $arResult[«VARIABLES»][«SMART_FILTER_PATH»] в корне каталога пустая.
Для решения этой проблемы создаем следующее правило обработки адресов:
Условие: #^/catalog/filter/([a-z0-9_\-\/]+)/apply/#
Файл: /catalog/index.php
Правило: SMART_FILTER_PATH=$1&

Получается для каталога два правила, одно, созданное компонентом, второе вручную:

Осталось в файле sections.php в параметрах  bitrix:catalog.smart.filter заменить
"SMART_FILTER_PATH" => $arResult["VARIABLES"]["SMART_FILTER_PATH"]
на
"SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"]
Все. Теперь фильтр работает в корне каталога.

Полностью код фильтра в sections.php
$APPLICATION->IncludeComponent(
"bitrix:catalog.smart.filter",
"cat",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => 0,
"FILTER_NAME" => $arParams["FILTER_NAME"],
"PRICE_CODE" => $arParams["PRICE_CODE"],
"CACHE_TYPE" => $arParams["CACHE_TYPE"],
"CACHE_TIME" => $arParams["CACHE_TIME"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"SAVE_IN_SESSION" => "N",
"FILTER_VIEW_MODE" => $arParams["FILTER_VIEW_MODE"],
"SECTION_TITLE" => "NAME",
"SECTION_DESCRIPTION" => "DESCRIPTION",
'HIDE_NOT_AVAILABLE' => $arParams["HIDE_NOT_AVAILABLE"],
"TEMPLATE_THEME" => $arParams["TEMPLATE_THEME"],
'CONVERT_CURRENCY' => $arParams['CONVERT_CURRENCY'],
'CURRENCY_ID' => $arParams['CURRENCY_ID'],
"SEF_MODE" => $arParams["SEF_MODE"],
"SEF_RULE" => "/catalog/filter/#SMART_FILTER_PATH#/apply/",
"SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"],
"PAGER_PARAMS_NAME" => $arParams["PAGER_PARAMS_NAME"],
"INSTANT_RELOAD" => $arParams["INSTANT_RELOAD"],
"SHOW_ALL_WO_SECTION" => "Y"
),
$component,
array('HIDE_ICONS' => 'Y')
);

Поделитесь ссылкой: