Вивести додаткове поле користувача, використання полів у фільтрах- замітка на сайті
Якщо вам потрібно вивести додаткове поле користувача типу "Прив'язка до розділів інфоблоку", ця записка можливо допоможе. Досвід використання досить вузький, мало де може знадобитися, проте. просто залишу це тут
Також, в рамках нотатки, можна побачити, як вивести назву батьківського розділу інфоблоку, знаючи ID одного з його нащадків (підрозділу).
Отже: Припустимо, що у нас є інфоблок з розділами, які мають підрозділи:

І є додаткове поле користувача, типу "Прив'язка до розділів інф. блоків" спрямоване на цей інфоблок

У профілі користувача, він може вибрати будь-який підрозділ, будь-якого розділу та найголовніше не один. Тобто властивість множина.

І припустимо, що користувач набирав якісь розділи. Нам же потрібно вивести обрані ним розділи (назви) десь на сайті, взагалі не важливо де
Для початку навчимося виводити додаткові поля користувача в принципі будь-якого типу. По суті, все просто:
//Отримуємо всі можливі поля поточного користувача $rsUser = CUser::GetByID($USER->GetID()); $arUser = $rsUser->Fetch();
//Виводимо додаткове поле (не множинне) $doppolya = $arUser['UF_. НАЗВНІ_ПОЛЯ']; echo $doppolya;
//Виводимо якщо множина foreach ($arUser['UF_. НАЗВА_ПОЛЯ'] as $propertyUf): echo $propertyUf; endforeach;
Тепер навчимося виводити розділи заданого інфоблоку, без прив'язки користувача-просто всі розділи та підрозділи списком. Тут знову все просто: використовуємо API Бітрікс метод CIBlockSection::GetTreeList - отримати дерево розділів
$IBLOCK_ > //Створюємо масивфільтра $arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y');
//Створюємо масив полів, що виводяться $arSelect = array('ID', 'NAME');
//Застосовуємо метод з фільтром та полями $rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);
//Виводимо назви та ID розділів while ($arSection = $rsSection->Fetch()) echo $arSection['NAME']; echo $arSection['ID']; >
А тепер найскладніше, нам потрібно-знаючи ID тих розділів, які вибрав користувач, додати у фільтрацію до методу CIBlockSection::GetTreeList і результатом отримаємо всі розділи, які вибрав користувач
Спочатку просто отримуємо всі розділи вибрані користувачем, і відразу ж заганяємо їх у змінну $sectionsUser
За допомогою eval перетворюємо цю змінну на масив array, який і застосуємо далі у фільтрі. масив (його змінну) називаю $fofilter
І додаємо фільтр до CIBlockSection::GetTreeList
$IBLOCK_ > //Створюємо масив фільтра $arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y');
//Додаємо наш масив у якому перераховані ID розділів вибрані користувачем $sect_ > // Створюємо масив фільтра. В кінці змінна фільтра $arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y', 'ID' => $sect_id);
//Створюємо масив полів, що виводяться $arSelect = array('ID', 'NAME');
//Застосовуємо метод з фільтром та полями $rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);
//Виводимо назви та ID розділів while ($arSection = $rsSection->Fetch()) echo $arSection['NAME']; echo $arSection['ID']; >
Все, тепер ви можете виводити назви та ID (ID звичайно можна прибрати з висновку, якщо ні до чого їх показувати)
ОтриматиНазва батька розділу інфоблоку
І як доповнення, спосіб як вивести батька, знаючи ID нащадка, розділу інфоблоку
Отже, користувач вибрав розділи "Інша побутова техніка" та "Мала побутова техніка". Нам потрібно вивести батька цих розділів "Ремонт побутової техніки"
Ми, способом описаним вище, може отримати ID всіх розділів, але нам достатньо одного, якщо він має батька і всі інші. Тому просто перериваємо while на другому кроці кроці
//Виводимо назви та ID розділів while ($arSection = $rsSection->Fetch()) //Нарисуємо змінної ID кожного розділу
$]; //Перериваємо while, ми отримали тільки один ID одного з розділів break; >
І просто виводимо ось таку конструкцію, в яку підсунули ID одного з відомих розділів методом CIBlockSection::GetByID