Битрикс — как получить все значения пользовательского поля «привязка к элементу»

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

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

В данном примере будем выбирать только выделенные для авторизованного пользователя значения. Для всего остального используйте 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 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

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

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