Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Как выводить пользовательские поля и названия разделов инфоблока в Битриксе

Просмотров: 24462 Если вам необходимо вывести дополнительное пользовательское поле типа "Привязка к разделам инфоблока", эта записка может оказаться полезной. Опыт использования достаточно узкий, мало где может понадобиться, но...просто оставлю это здесь.
В этой заметке используется метод старого ядра CIBlockSection::GetList - он работоспособен, но рекомендую использовать новые методы ядра D7 по заметке: Получение информации о разделах инфоблока на D7

Допустим, у нас есть инфоблок с разделами, и подразделами:

Также присутствует дополнительное пользовательское поле типа "Привязка к разделам инф. блоков" с кодом "UF_BEL_EXCUTOR_CATEG", связанное с этим инфоблоком:

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

Предположим, что пользователь выбрал определенные разделы, и нам необходимо вывести их названия на сайте. Для начала выведем все поля пользователя, включая дополнительные:

$rsUser = CUser::GetByID($USER->GetID());
$arUser = $rsUser->Fetch();
print_r($arUser);

В массиве $arUser мы найдем данные о текущем авторизованном пользователе, включая массив типа:
[UF_BEL_EXCUTOR_CATEG] => Array(...ID_РАЗДЕЛОВ_ИНФОБЛОКА_ИЗ_ПРОФИЛЯ_ПОЛЬЗОВАТЕЛЯ...)

Теперь, имея ID выбранных пользователем разделов, воспользуемся методом CIBlockSection::GetList(), чтобы получить названия этих разделов:

$dbSections = CIBlockSection::GetList(
    array(
        'NAME' => 'ASC' // Сортируем на названию
    ),
    array(
        'ID' => $arUser['UF_BEL_EXCUTOR_CATEG'] // Фильтр
    ),
    false,
    array(
        'NAME' // Перечислите нужные поля, если нужно не только название
    )
);
while ($arSection = $dbSections->Fetch()) {
    echo 'Раздел:' . $arSection['NAME'];
}

Таким образом, мы получим названия всех разделов, выбранных пользователем в своем профиле.

Если вы хотите получить URL раздела, используйте GetNext() вместо Fetch(). Fetch() работает быстрее, но возвращает "сырые" данные без дополнительной обработки.

Получение названия родительского раздела инфоблока

Дополнительно рассмотрим способ вывода названия родительского раздела, имея ID его потомка - раздела инфоблока.

Предположим, что пользователь выбрал разделы "Другая бытовая техника" и "Малая бытовая техника", которые принадлежат разделу "Ремонт бытовой техники". Нам нужно вывести название этого родительского раздела.

Для этого воспользуемся методом CIBlockSection::GetNavChain(), который позволяет получить цепочку разделов:

$dbSections = CIBlockSection::GetList(
    array(
        'NAME' => 'ASC'
    ),
    array(
        'ID' => $arUser['UF_BEL_EXCUTOR_CATEG']
    ),
    false,
    array(
        'ID',
        'NAME'
    )
);
while ($arSection = $dbSections->Fetch()) {
    $navChain = CIBlockSection::GetNavChain(
        false,
        $arSection['ID'],
    );
    while ($arNav=$navChain->GetNext()) {
       echo $arNav['NAME']; // Раздел родитель
    }
}

Внутри цикла метода CIBlockSection::GetList мы получаем ID выбранного пользователем раздела. Затем, используя этот ID, мы получаем всю информацию о родительском разделе с помощью метода GetNavChain() и выводим его название.

Вариант получения разделов по ID, на D7

Этот код использует D7-синтаксис для работы с разделами инфоблока и пользовательскими полями. Он предполагает загрузку модуля инфоблоков, получение ID текущего пользователя, извлечение значения пользовательского поля и последующий вывод названий выбранных разделов.

use Bitrix\Main\Loader;
use Bitrix\Iblock\SectionTable;

Loader::includeModule('iblock');

$userId = $USER->GetID(); // ID текущего пользователя
$userField = 'UF_BEL_EXCUTOR_CATEG'; // Поле привязки к разделам инфоблока

$user = \Bitrix\Main\UserTable::getList([
    'filter' => ['=ID' => $userId],
    'select' => ["ID", $userField]
])->fetch();

if ($user && !empty($user[$userField])) {
    $sectionIds = $user[$userField];

    $dbSections = SectionTable::getList([
        'order' => ['NAME' => 'ASC'],
        'filter' => ['=ID' => $sectionIds],
        'select' => ['ID', 'NAME'] // Перечислите нужные поля
    ]);

    while ($section = $dbSections->fetch()) {
        echo 'Раздел: ' . $section['NAME'];
    }
}

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс