Рубрики
Bitrix

Preset

$arResult['GRID']['FILTER_ID'] = (str)$arParams['FILTER_ID];
$arResult['GRID']['FILTER_FIELDS'] =  $arParams['FILTER_FIELDS] // массив полей фильтра
$arResult['GRID']['FILTER_OBJ'] = new Bitrix\Main\UI\Filter\Options($arResult['GRID']['FILTER_ID'], $arParams['FILTER_PRESETS']); // либо запилить пресет прямо в компонент.
$filterData = $arResult['GRID']['FILTER_OBJ']->getFilter($arResult['GRID']['FILTER_FIELDS']); // получили массив для фильтрации

Фильтруем! :)

 .... $filterData = $arResult['GRID']['FILTER_OBJ']->getFilter($arResult['GRID']['FILTER_FIELDS']); // получили массив для фильтрации $arResult['GRID']['GET_LIST']['filter'] = []; // массив условий для последующей фильтрации в ::getList(...) if ($filterData["FILTER_APPLIED"] == true) {     foreach ($filterData as $k => $v) {         $v = htmlspecialchars($v);         if (is_numeric(str_replace(",",".",$v))) $v = floatval(str_replace(",",".",$v)); // преобразование числа         if (preg_match('#(_from|_to)#', $k, $logics)){             $logics = $logics[1];             $k = preg_replace('#(_from|_to)#', '', $k);             if ($logics=="_from"){                 $logics = ">";             }elseif($logics=="_to"){                 $logics = "<";             }         }elseif (preg_match('#^(<|>|!=|>=|<=|%)#', $v, $logics) && $logics[1]){             $logics = $logics[1];             $v = preg_replace('#^'.$logics.'#', '', $v);         } else {             $logics = '%';         }         if ($k == 'CONTRAGENT') {             $arResult['GRID']['GET_LIST']['filter'][$logics.'CONTRAGENT_NAME'] = $v;         }elseif ($k == 'ADDRESS') {             $arResult['GRID']['GET_LIST']['filter'][$logics.'ADDRESS_NAME'] = $v;         }elseif ($k == 'ACCOUNT_NUMBER') {             $arResult['GRID']['GET_LIST']['filter'][$logics.'ACCOUNT_NUMBER'] = $v;         }elseif (isset($arResult['GRID']['FILTER_TABLE_CODE'][$k])) {             $col_name = $arResult['GRID']['FILTER_TABLE_CODE'][$k]?:$k;             $arResult['GRID']['GET_LIST']['filter'][$logics.$col_name] = $v;         }elseif ($k == 'FIND' && !empty($v)) {             $find = [];             foreach($arResult['GRID']['FILTER_TABLE_CODE'] as $code => $col_name){                 if ($col_name) $find[$logics.$col_name] = trim($v);             }             $arResult['GRID']['GET_LIST']['filter'][] = array_merge(["LOGIC" => "OR"],$find);         }     }     unset($col_name, $find); } 

Источник: https://ra-germes.ru/blog/bitrix-develop/preset-v-mainuifilter/?commentId=16

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *