Задача
При синхронизации каталога товаров из 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с.
Алгоритм работы:
-
- Выбрать все свойства с типом “список” в инфоблоке каталога
-
- Зеркально создать свойства с такими же названиями (или нужными вам по логике именования) и типом “строка”
-
- Зеркально заполнить значения свойств для всех элементов инфоблока
-
- В фильтр вывести свойства с типом “строка” вместо “списка”
Данный подход самый трудозатратный из всех, но он не требует кастомизации компонента.