Показване на допълнително потребителско поле, използване на полета във филтри - бележка на сайта

Ако трябва да покажете допълнително персонализирано поле от типа „Свързване към секции на информационни блокове“, тази бележка може да помогне. Опитът от употреба е доста ограничен, има няколко места, където може да ви потрябва, но. Просто ще оставя това тук

Освен това, като част от бележката, можете да видите как да покажете името на родителския раздел на информационния блок, като знаете идентификатора на един от неговите наследници (подсекция).

И така: Да предположим, че имаме информационен блок със секции, които имат подсекции:

поле

И има допълнително потребителско поле, като например „Свързване към секции на информационни блокове“, насочено към този информационен блок

използване

В профила на потребителя той може да избере всеки подраздел, всеки раздел и най-важното - нито един. Тоест свойството е множествено.

поле

И да предположим, че потребителят е избрал някои секции. Трябва да покажем избраните от него секции (имена) някъде в сайта, няма значение къде

Като начало, нека научим как да показваме допълнителни потребителски полета по принцип от всякакъв тип. Всъщност всичко е просто:

//Вземете всички възможни полета на текущия потребител $rsUser = CUser::GetByID($USER->GetID()); $arUser = $rsUser->Fetch();

//Показване на допълнително поле (не множество) $doppolya = $arUser['UF_. ИМЕ НА ПОЛЕТО']; ехо $doppolya;

//Изход при множество foreach ($arUser['UF_. FIELD_NAME'] като $propertyUf): echo $propertyUf; endforeach;

Сега нека научим как да показваме секции от даден информационен блок, без да свързваме потребител - само всички секции и подсекции като списък. Тук отново всичко е просто: използваме API метода на Bitrix CIBlockSection::GetTreeList - получаваме дървото на секциите

$IBLOCK_ > //Създаване на масивфилтър $arFilter = масив ('IBLOCK_ID' => $IBLOCK_ID, 'АКТИВЕН' => 'Y');

//Създаване на масив от изходни полета $arSelect = array('ID', 'NAME');

//Прилагане на метод с филтър и полета $rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);

//Показване на имена и идентификатори на секции while ($arSection = $rsSection->Fetch()) echo $arSection['NAME']; echo $arSection['ID']; >

И сега най-трудното нещо, от което се нуждаем - знаейки идентификатора на тези секции, които потребителят е избрал, добавете към филтрирането към метода CIBlockSection::GetTreeList и в резултат ще получим всички секции, които потребителят е избрал

Първо, ние просто получаваме всички секции, избрани от потребителя, и веднага ги поставяме в променливата $sectionsUser

С помощта на eval превръщаме тази променлива в масив от масив, който ще бъде приложен по-нататък във филтъра. Наричам масива (неговата променлива) $fofilter

И добавете филтър към CIBlockSection::GetTreeList

$IBLOCK_ > //Създаване на филтърен масив $arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y');

//Добавяне на нашия масив, който изброява идентификаторите на секции, избрани от потребителя $sect_ > //Създаване на филтърен масив. В края на филтърната променлива $arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y', 'ID' => $sect_id);

//Създаване на масив от изходни полета $arSelect = array('ID', 'NAME');

//Прилагане на метод с филтър и полета $rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);

//Показване на имена и идентификатори на секции while ($arSection = $rsSection->Fetch()) echo $arSection['NAME']; echo $arSection['ID']; >

Това е всичко, сега можете да показвате имена и идентификатори (разбира се, идентификаторите могат да бъдат премахнати от изхода, ако няма нужда да ги показвате)

ВземетеИме на родител на секция Infoblock

И като допълнение, начин за показване на родителя, знаейки ID на детето, на секцията с инфоблок

И така, потребителят е избрал секции "Други домакински уреди" и "Малки домакински уреди". Трябва да покажем родителя на тези раздели "Ремонт на домакински уреди"

Ние, по описания по-горе начин, можем да получим идентификаторите на всички раздели, но един е достатъчен за нас, ако има родител, тогава всички останали. Затова просто прекъсваме времето във втората стъпка

//Показване на имена и идентификатори на секции while ($arSection = $rsSection->Fetch()) //Присвояване на идентификатора на всяка секция към променлива

$]; //Break while, получихме само един ID на един от разделите break; >

И ние просто показваме такава конструкция, в която идентификаторът на една от познатите секции е вмъкнат с помощта на метода CIBlockSection::GetByID