Фильтрация
Пользовательские поля разделов могут принимать участие в фильтрации.
$sec_Filter= array( "IBLOCK_ID" => $IBLOCK_ID, "DEPTH_LEVEL" => "2", "!UF_ARC_PAGES" => "" );
Будут отобраны все разделы, у которых установлено значение свойства UF_ARC_PAGES.
Фильтрация по значению пользовательского свойства:
$arSFilter ['=UF_USERS_PROPERTY'] =$users_property_value;
Сортировка
Сортировать по пользовательским полям разделов:
$arSort = array( "UF_RATING"=>"asc", "sort"=>"asc" );
Получение значений
Получить значение пользовательского поля можно с помощью метода GetList соответствующего класса.
Значение пользовательского поля для пользователя с ID=2 можно таким образом:
$rsUser = CUser::GetByID($user); $arUser = $rsUser->Fetch(); $нужное значение = $arUser['код пользовательского поля'];
Чтобы получить значение пользовательского поля определенного пользователя, тип поля – строка, необходимо воспользоваться методом GetListкласса CUser. При этом в качестве четвертого аргумента данному методу необходимо передать массив с ключом SELECT, значениями которого являются список кодов пользовательских свойств, которые необходимо получить.
global $USER; $arFilter = array("ID" => $USER->GetID()); $arParams["SELECT"] = array("UF_USER_CARD_CODE"); $arRes = CUser::GetList($by,$desc,$arFilter,$arParams); if ($res = $arRes->Fetch()) { echo $res["UF_USER_CARD_CODE"]; }
Если тип пользовательского поля список, то для получения значения (или значений, если возможен множественный выбор) нужно воспользоваться методом GetList класса CUserFieldEnum.
global $USER; $arFilter = array("ID" => $USER->GetID()); $arParams["SELECT"] = array("UF_LIST_TASK"); $arRes = CUser::GetList($by,$desc,$arFilter,$arParams); if ($res = $arRes->Fetch()) { foreach ($res["UF_LIST_TASK "] as $id) { $rsRes= CUserFieldEnum::GetList(array(), array( "ID" => $id, )); if($arResult = $rsRes->GetNext()) echo $arGender["VALUE"]; } }
Если необходимо получить список всех значений пользовательского поля объекта USER типа список, то следует воспользоваться следующим кодом:
global $USER_FIELD_MANAGER; $arFields = $USER_FIELD_MANAGER->GetUserFields("USER"); $obEnum = new CUserFieldEnum; $rsEnum = $obEnum->GetList(array(), array("USER_FIELD_ID" => $arFields["UF_LIST_TASK "]["ID"])); while($arEnum = $rsEnum->GetNext()){ echo $arEnum["VALUE"]; }
Для выбора значения пользовательского поля у секции информационного блока можно воспользоваться методом CIBlockSection:GetList:
$aSection = CIBlockSection::GetList( array(), array( 'IBLOCK_ID' => 3, 'CODE' => 'test_section', ), false, array( 'UF_DEV2DAY_FIELD' ) )->Fetch();
Получение значения пользовательского поля типа файл конкретной секции инфоблока:
$rsResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("IBLOCK_ID" => "1"), false, $arSelect = array("UF_*")); while ($arResult = $rsResult -> GetNext()) { print "
" . print_r($arResult, true) . "
"; }
Так как пользовательские поля можно использовать не только с разделами информационного блока, но и с любыми другими сущностями, то для выбора значений по идентификатору сущности используется класс CUserTypeManager. Экземпляр данного класса уже находится в глобальной переменной $USER_FIELD_MANAGER.
global $USER_FIELD_MANAGER; $aSection = CIBlockSection::GetList( array(), array( 'IBLOCK_CODE' => 'shop_news', 'CODE' => 'test_section', ) )->Fetch(); if( !$aSection ) { throw new Exception( 'Секция не найдена' ); } $aUserField = $USER_FIELD_MANAGER->GetUserFields( 'IBLOCK_3_SECTION', $aSection['ID'] ); // array
В результате мы получим массив содержащий в себе всю информацию о поле и его значении для конкретного объекта.