Битрикс – как получить все значения пользовательского поля “привязка к элементу”

Пользовательские поля – прекрасный инструмент для расширения стандартных возможностей битрикса. Он хорошо применим не только в инфоблоках и их разделах, но и в доп. полях пользователя.

Как вывести весь список привязок к свойству для авторизованного пользователя в Битриксе

В данном примере будем выбирать только выделенные для авторизованного пользователя значения. Для всего остального используйте api инфоблоков.

Поможет в выводе этих свойств CUser::GetList, но для начала создадим 2 пользовательских свойства с типом “привязка к элементам инфоблока” (ваши инфоблоки уже должны быть созданы). В строке “Код поля” вводим соответственно UF_ORGANIZATION и UF_CONTR, с привязкой к разным информационным блокам. Если привязка будет множественная, то есть, через зажатый Ctrl вы сможете выбрать сразу несколько значений а не одно, то выбирайте соответствующую галочку при создании сразу – потом будет поздно, и придется все делать по новой.

Готово, наши свойства созданы, и в информационных блоках есть по 2-3 тестовых значения. Теперь заходите в админку, настройки вашего пользователя, доп. поля. Выбирайте значения и сохраняйте, дальше займемся их выводом.

На тестовой странице пишем:

// find organization and contragent
global $USER;
$order = array('sort' => 'asc');
$tmp = 'sort';
$filter = array('ID' => $USER->GetID());
$select = array("SELECT" => array("UF_ORGANIZATION", "UF_CONTR"));
$rsUsers = CUser::GetList($order, $tmp, $filter, $select);
while ($arUser = $rsUsers->Fetch()) {
	$organization = $arUser['UF_ORGANIZATION'];
	$contr = $arUser['UF_CONTR'];
}

Основной массив, на который стоит обратить свое внимание это $select. Именно в него мы должны передать “символьные коды” наших “доп полей”. Если мы распечатаем массив $organization, то увидим следующую картину:

[0] => 43

Массив с идентификатором элемента инфоблока. Стоит отметить, что данный массив можно передать в дальнейшем для фильтра CIBlockElement::GetList. Если вы выбрали “множественное” при создании доп свойства битрикса, то в массиве добавятся и другие записи:

[0] => 43,
[1] => 44

Где 43 и 44 это ID элементов, привязанных и выбранных у текущего авторизованного пользователя. Не забывайте в своих скриптах рассматривать вариант для не авторизованных.

Как в битриксе узнать значения свойств, зная их ID

Как уже неоднократно было сказано ранее, это всего-лишь ID элементов, а значит, нам нужно API для элементов инфоблока. Использовать будем CIBlockElement::GetByID.

<?
global $USER;
$order = array('sort' => 'asc');
$tmp = 'sort';
$filter = array('ID' => $USER->GetID());
$select = array("SELECT" => array("UF_ORGANIZATION", "UF_CONTR"));
$rsUsers = CUser::GetList($order, $tmp, $filter, $select);
while ($arUser = $rsUsers->Fetch()) {
	$organization = $arUser['UF_ORGANIZATION'];
	$contr = $arUser['UF_CONTR'];
}

// contr
if (is_array($contr)) {
	foreach($contr as $key) {
		$res = CIBlockElement::GetByID($key);
		if ($ar_res = $res->GetNext()) {
			$orgName = $ar_res['NAME'];
		}
		$arContr[$key] = $orgName;
	}
}
?>

<select name="org">
<?if (is_array($arContr) && count($arContr) > 0) {?>
	<?foreach($arContr as $k => $item) {?>
		<option value="<?=$k?>"><?=$item?></option>
	<?}?>
<?} else {?>
	<option value="">Не выбрана</option>
<?}?>
</select>

Полный код выглядит так, а наш итоговый массив теперь выглядит как “ключ” => “значение” или же “id элемента” => “название элемента”. В самом конце кода выводим их как option для select`а.

Если селект является частью веб-формы, то по его “имени” можно провести дальнейшую фильтрацию. При выборе нам видно лишь имя, но при submit отправится ID, который лежит в option value=””.

Если на вашем сайте необходимо настроить логику связанную с дополнительными полями пользователя или настроить фильтрацию по этим свойствам - обращайтесь ко мне за помощью

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *