Убираем filter и apply
Строку в компоненте bitrix:catalog заменить на :
"smart_filter" => "#SECTION_CODE_PATH#/#SMART_FILTER_PATH#/",
В фильтре catalog.smart.filter меняем настройки на такие :
<?
$res = CIBlockSection::GetByID($arCurSection['ID']);
if($ar_res = $res->GetNext())
$url = "/catalog/".$ar_res[CODE]."/#SMART_FILTER_PATH#/";
$APPLICATION->IncludeComponent("bitrix:catalog.smart.filter", "bootstrap_v4", array(
"CACHE_GROUPS" => "N", // Учитывать права доступа
"CACHE_TIME" => "3600", // Время кеширования (сек.)
"CACHE_TYPE" => "A", // Тип кеширования
"COMPOSITE_FRAME_MODE" => "N",
"COMPOSITE_FRAME_TYPE" => "AUTO",
"CONVERT_CURRENCY" => "N", // Показывать цены в одной валюте
"DISPLAY_ELEMENT_COUNT" => "N", // Показывать количество
"FILTER_NAME" => "arrFilter", // Имя выходящего массива для фильтрации
"FILTER_VIEW_MODE" => "vertical",
"HIDE_NOT_AVAILABLE" => "Y", // Не отображать товары, которых нет на складах
"IBLOCK_ID" => $arParams["IBLOCK_ID"], // Инфоблок
"IBLOCK_TYPE" => "catalog", // Тип инфоблока
"PAGER_PARAMS_NAME" => "arrPager",
"SAVE_IN_SESSION" => "N", // Сохранять установки фильтра в сессии пользователя
"SECTION_CODE" => "", // Код раздела
"SECTION_DESCRIPTION" => "-", // Описание
"SECTION_ID" => $arCurSection['ID'], // ID раздела инфоблока
"SECTION_TITLE" => "-", // Заголовок
"SEF_MODE" => "Y", // Включить поддержку ЧПУ
"TEMPLATE_THEME" => "blue", // Цветовая тема
"XML_EXPORT" => "N", // Включить поддержку Яндекс Островов
"COMPONENT_TEMPLATE" => "",
"POPUP_POSITION" => "left",
"SECTION_CODE_PATH" => "", // Путь из символьных кодов раздела
"SEF_RULE" => $url, // Правило для обработки
"SMART_FILTER_PATH" => $_REQUEST["SMART_FILTER_PATH"], // Блок ЧПУ умного фильтра
"SHOW_ALL_WO_SECTION" => "Y",
"PRICE_CODE" => "", // Тип цены
"PREFILTER_NAME" => "smartPreFilter", // Допфильтрация элементов
),
false);
?>
В urlrewrite.php нужно добавить одно правило, оно не затрется в будущем, а общий вид будет
примерно таким:
<?php
$arUrlRewrite=array (
1 =>
array (
'CONDITION' => '#^/catalog/([a-z0-9_\\-\\/]+)/#',
'RULE' => 'SMART_FILTER_PATH=$1&',
'ID' => '',
'PATH' => '/catalog/index.php',
'SORT' => 100,
),
2 =>
array (
'CONDITION' => '#^/catalog/\\??(.*)#',
'RULE' => 'SMART_FILTER_PATH=$1&$2',
'ID' => 'bitrix:catalog.smart.filter',
'PATH' => '/catalog/index.php',
'SORT' => 100,
),
3 =>
array (
'CONDITION' => '#^/catalog/#',
'RULE' => '',
'ID' => 'bitrix:catalog',
'PATH' => '/catalog/index.php',
'SORT' => 100,
)
);
Убираем IS и OR
Чтобы убрать -is- нужно подменять значения в SMART_FILTER_PATH, а затем сделать 301 редирект с оригинального адреса на кастомный.
Как вы будете делать подмену - я не знаю (циклами, массивами, и прочими "пэхэпэшными штучками"), но подмена должна быть выше, чем код фильтра. Нужно проверять вхождения, корректность подмен, добавить обработку ошибок, юзать 301 редирект, чтобы не плодить дубли, которых и так много и без доработки фильтра.
Вот пример:
$_REQUEST[SMART_FILTER_PATH] = str_replace("red/brown", "colors-is-brown-or-red/", $_REQUEST[SMART_FILTER_PATH]);
В итоге вместо строки
https://test.ru/catalog/pants/filter/color_ref-is-green/apply/
мы получим строку:
https://test.ru/catalog/pants/green/