Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как отфильтровать список пользователей по дополнительному свойству?

00 голосов
5
Здравствуйте.

Помогите, пожалуйста со следующей проблемой:

Есть код:
Код
$arUsers = CUser::GetList(($by="ID"), ($order="desc"), Array("ACTIVE" => "Y"), array("SELECT"=>array("UF_1C") ));


В получаемой выборке — все активные пользователи. Как выбрать только тех, у кого поле UF_1C НЕ пустое? Не хочется каждый раз полный список пользователей выбирать и фильтровать в PHP.
спросил 05 Май, 13 от Daltazar (280 баллов)

5 Ответы

00 голосов
Попробуйте следующее:

$filter = Array("ACTIVE" => "Y", "!UF_1C" => false);
$arUsers = CUser::GetList($by="ID", $order="desc", $filter);
ответил 05 Май, 13 от Thieve (460 баллов)
00 голосов
:D Я понял, почему у меня не фильтровало! Я забыл заполнить это поле. Слегка переработался ужо.
Спасибо за ответ, Денис!
ответил 06 Май, 13 от Daltazar (280 баллов)
00 голосов
Ещё вопрос на аналогичную тему: как отфильтровать элементы инфоблока по значению реквизита? У реквизитов имена русские, коды в базе у реквизитов непостоянны.

И каким образом выбрать все реквизиты, которые есть у элемента?

Пример:

Код
$arFilter = Array("IBLOCK_ID"=>IntVal($infoblockID), "ACTIVE"=>"Y"); // Здесь нужно добавить фильтр по значению реквизита, описание которого известно
$arSelect = Array("PROPERTY_*"); // Как получить все реквизиты? PROPERTY_* не срабатывает
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
while($ob = $res->GetNextElement())
{
  $arFields = $ob->GetFields();
  var_dump($arFields);
}
ответил 08 Июль, 13 от Daltazar (280 баллов)
00 голосов
Точно не скажу, не проверял, но попробуйте для вывода всех свойств изменить код на следующий:

$arFilter = Array("IBLOCK_ID"=>IntVal($infoblockID), "ACTIVE"=>"Y"); // Здесь нужно добавить фильтр по значению реквизита, описание которого известно

если свойство известно, то просто добавьте в $arFilter "PROPERTY_имя" => "значение".

Для получения всех свойств:

$arSelect = Array("PROPERTY_*"); // Как получить все реквизиты? PROPERTY_* не срабатывает
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
var_dump($arFields);
$arProps = $ob->GetProperties();
var_dump($arProps);
}
ответил 12 Окт, 13 от Thieve (460 баллов)
00 голосов
Спасибо Денис, я снова успел найти как вывести свойства прежде, чем заглянуть сюда. Тяжело, конечно, разбираться с документацией - примеров маловато совсем. Как я понял, свойства не отображались они потому, что я не добавил IBLOCK_ID в $arSelect (у Вас, кстати, то же в примере).

Цитата
если свойство известно, то просто добавьте в $arFilter "PROPERTY_имя" => "значение".


Когда вывел свойства на экран, то определил следующее:
Свойство множественное, CML2_TRAITS, внутри которого несколько подмассивов. Боюсь, что стандартным способом использовать реквизит как фильтр не получится. Только выбирать все элементы и пробегать по ним в php, выбирая нужные. Или делать прямой запрос в БД, что чревато.
ответил 13 Янв, 14 от Daltazar (280 баллов)

Похожие вопросы

0 голосов
2 ответов
0 голосов
7 ответов
спросил 10 Авг, 13 от Fox2009 (320 баллов)
0 голосов
3 ответов