Недавно нам потребовалось для заказчика настроить сортировку значений одного из свойств фильтра в произвольном порядке, не по алфавиту. Логично в данном случае использовать поле сортировка. Установив значения сортировки для каждого значения свойства, мы обнаружили, что ничего не изменилось.
В прошлый раз мы настраивали сортировку строковых значений как числовых
Изменим код с учетом заказной сортировки значений свойства Brand.
Находим файл result_modifier.php умного фильтра, в нашем случае по следующему пути, где template_s1 - папка с шаблоном:
/bitrix/templates/template_s1/components/bitrix/catalog.smart.filter/main/result_modifier.php
- в вашем случае путь может быть иной.
В этом файле, после первой строки:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
размещаем следующий код:
foreach($arResult["ITEMS"] as $k => &$prop){
if ( $k != '265' ) {//здесь указываем id нужного свойства инфоблока
$values = [];
foreach ($prop["VALUES"] as $key => $sortkey) {
$values[$key] = $sortkey['VALUE'];
}
array_multisort($values, SORT_NUMERIC, $prop['VALUES']);
unset($values);
}
}
Фактически, этот код добавляет условие, если свойство не Brand (id 265), то сортируй по алфавиту с учетом константы SORT_NUMERIC (как и было раньше), и соответственно свойство Brand отсортируется по умолчанию (по полю сортировка).