Найти в Дзене

Сортировка значений филтров по алфавиту в компоненте bitrix:catalog.smart.filter

Как оказалось, в Битриксе у компонента bitrix:catalog.smart.filter нет параметров для сортировки значений в фильтрах. Однако, задача есть, и нужно придумать как сделать сортировку значений в фильре по алфавиту. Для решения этой задачи можно добавить в конец файла result_modifier.php в шаблоне вызова компонента bitrix:catalog.smart.filter следущий код: // Массив свойств, которые нужно отсортировать, с указанием функции сортировки $resortProps = [
"BRAND" => "sortByName",
"SERIES" => "sortByName",
"STRANA" => "sortByName",
];
// Перебираем список выводимых свойст для отображения в фильтре foreach($arResult["ITEMS"] as &$filterItem){
// Проверяем, присутствует ли свойство в списке для сортировки if(isset($resortProps[$filterItem["CODE"]])){
// Еще одна проверка на наличие значений, нужно для исключения ошибок if(count($filterItem["VALUES"])){
// Вызов функции сортировки значений свойства usort($filterItem["VALUES"], $resortProps[$filterItem["CODE"]]);
}
}
}
// фу

Как оказалось, в Битриксе у компонента bitrix:catalog.smart.filter нет параметров для сортировки значений в фильтрах. Однако, задача есть, и нужно придумать как сделать сортировку значений в фильре по алфавиту.

Для решения этой задачи можно добавить в конец файла result_modifier.php в шаблоне вызова компонента bitrix:catalog.smart.filter следущий код:

// Массив свойств, которые нужно отсортировать, с указанием функции сортировки $resortProps = [
"BRAND" => "sortByName",
"SERIES" => "sortByName",
"STRANA" => "sortByName",
];

// Перебираем список выводимых свойст для отображения в фильтре foreach($arResult["ITEMS"] as &$filterItem){


// Проверяем, присутствует ли свойство в списке для сортировки if(isset($resortProps[$filterItem["CODE"]])){


// Еще одна проверка на наличие значений, нужно для исключения ошибок if(count($filterItem["VALUES"])){

// Вызов функции сортировки значений свойства usort($filterItem["VALUES"], $resortProps[$filterItem["CODE"]]);
}
}
}

// функция сортировки массива по значению // внутри этой функции задается логика сортировки элментов массива function sortByName($a, $b) {
if ($a['VALUE'] > $b['VALUE']) {
return 1;
} elseif ($a['VALUE'] < $b['VALUE']) {
return -1;
}
return 0;
}

Вот и все, в шаблоне компонента ничего изменять не нужно ))

По желанию можно вытащить в настройки переменную $resortProps и управлять ей не погружаясь в код, но как показала практика, подобные случаи крайне редки, поэтому обычно это делается разово и забывается до следующего проекта.

Желаю приятного пользования, буду рад лайкам и комментариям.