Редактировать

Задача

При синхронизации каталога товаров из 1С на сайт приходят свойства в виде типа “список”.

Как описано в документации “Для формирования URL фильтра в зависимости от настроек фильтра участвуют значения: для строковых свойств - само значение свойства для свойств типа Список - внешний код для свойств Элемент и Раздел - символьный код если есть, иначе название. Для Пользовательских свойств - результат метода GetExtendedValue или GetPublicViewHTML с “MODE” => “SIMPLE_TEXT”. (Зависит от автора свойства).”. пруф

Т.е. в нашей ситуации при отметке галок в url будет что-то подобное:

/catalog/catalog-group/filter/proizvoditel-is-6055fbca-72a3-11e7-80f5-80c16e7a80a4/apply/

А хочется видеть так:

/catalog/catalog-group/filter/proizvoditel-is-somecoolbrandname/apply/

В итоге нам нужно реализовать ЧПУ умного фильтра на основе значений свойств типа “список”, вместо их внешних кодов.

Решение

Вариант 1

У битрикса есть механизм “Короткие ссылки”, если SEO-специалистов это устроит, то они могут набить нужные адреса на подготовленные параметры фильтрации.

Почитать можно тут

Вариант 2

Добиться нужного результата формирования УРЛ можно кастомизацией стандартного компонента. Для этого копируем стандартный компонент в свое “пространство имен” и правим его код.

В файле “class.php” ищем код:

<?
$url_id = toLower($enum["XML_ID"]);
?>

И заменяем на:

<?
$url_id = CUtil::translit(toLower($enum["VALUE"]), "ru");
?>

На эту тему создана идея

Данный подход быстр, но мы теряем возможность обновлений.

Вариант 3

Еще одним вариантом решения задачи является добавления обработчика события на окончание синхронизации с 1с.

Алгоритм работы:

    1. Выбрать все свойства с типом “список” в инфоблоке каталога
    1. Зеркально создать свойства с такими же названиями (или нужными вам по логике именования) и типом “строка”
    1. Зеркально заполнить значения свойств для всех элементов инфоблока
    1. В фильтр вывести свойства с типом “строка” вместо “списка”

Данный подход самый трудозатратный из всех, но он не требует кастомизации компонента.