261  /  328

Примеры работы

Просмотров: 4064 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 18.09.2015

Фильтрация

Пользовательские поля разделов могут принимать участие в фильтрации.

$sec_Filter= array(  
   "IBLOCK_ID" => $IBLOCK_ID, 
   "DEPTH_LEVEL" => "2", 
   "!UF_ARC_PAGES" => ""
);

Примечание: Фильтрация по пользовательским полям работает только при наличии фильтра по IBLOCK_ID.

Будут отобраны все разделы, у которых установлено значение свойства UF_ARC_PAGES.


Фильтрация по значению пользовательского свойства:

$arSFilter ['=UF_USERS_PROPERTY'] =$users_property_value;


Сортировка

Сортировать по пользовательским полям разделов:

    $arSort = array(
       "UF_RATING"=>"asc",
       "sort"=>"asc"
      
   );


Получение значений

Получить значение пользовательского поля можно с помощью метода GetList соответствующего класса.

Значение пользовательского поля для пользователя можно получить таким образом:

$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($arGender = $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();

Примечание: Передача идентификатора инфоблока (IBLOCK_ID) обязательна, иначе выборка пользовательских свойств не будет осуществлена.


Получение значения пользовательского поля типа файл конкретной секции инфоблока:

$iblockID = 1;
    $sectionID = 10; // ID секции
    $propertyCode = 'UF_MY_FILE'; // Код свойства

    $rsResult = CIBlockSection::GetList(array("SORT" => "ASC"), array("ID" => $sectionID, "IBLOCK_ID" => $iblockID),
                                        false, $arSelect = array("ID", "IBLOCK_ID", $propertyCode));
    if ($arResult = $rsResult -> GetNext())
    {
        echo '
', mydump($arResult), '
'; }

Так как пользовательские поля можно использовать не только с разделами информационного блока, но и с любыми другими сущностями, то для выбора значений по идентификатору сущности используется класс 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

В результате мы получим массив содержащий в себе всю информацию о поле и его значении для конкретного объекта.


Примечание: Чтобы получить все значения пользовательских полей в параметре arSelect достаточно указать Array("UF_*").

10
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии