Метод CIBlockElement::GetElementGroups в 1С-Битрикс: описание, примеры использования и работа с URL

Метод CIBlockElement::GetElementGroups — один из ключевых при работе с элементами информационных блоков в системе 1С-Битрикс. Он позволяет получать список разделов (групп), к которым принадлежит элемент или несколько элементов.

Метод CIBlockElement::GetElementGroups в 1С-Битрикс

Общее описание метода

CDBResult CIBlockElement::GetElementGroups(
    mixed $ID,
    bool  $bElementOnly = false,
    array $arSelect = []
)

Параметры:

Параметр Тип Описание
$ID mixed ID элемента (int) или массив ID (array).
$bElementOnly bool Если true, будут исключены связи через свойства типа "Привязка к разделу". По умолчанию — false.
$arSelect array Список полей, которые нужно вернуть. Если не указан — возвращаются все поля.
Поддержка пользовательской выборки полей появилась с версии 12.5.7.

Возвращаемое значение

Метод возвращает объект CDBResult. Для извлечения данных используется метод Fetch().

Примеры использования

1. Получение всех групп элемента по его ID

Получим список всех разделов, к которым привязан элемент с ID=42:

$elementId = 42;
$dbSections = CIBlockElement::GetElementGroups($elementId);

while ($arSection = $dbSections->Fetch()) {
    echo 'ID раздела: ' . $arSection['ID'] . ', Название: ' . $arSection['NAME'] . '<br>';
}

2. Исключение привязок из свойств

Если необходимо получить только основные привязки (без учета связей через свойства):

$elementId = 42;
$dbSections = CIBlockElement::GetElementGroups($elementId, true);

while ($arSection = $dbSections->Fetch()) {
    echo 'ID раздела: ' . $arSection['ID'] . ', Название: ' . $arSection['NAME'] . '<br>';
}

3. Выборка конкретных полей раздела

Выберем только ID, NAME и CODE разделов:

$elementId = 42;
$arSelect = ['ID', 'NAME', 'CODE'];
$dbSections = CIBlockElement::GetElementGroups($elementId, false, $arSelect);

while ($arSection = $dbSections->Fetch()) {
    echo "ID: {$arSection['ID']}, Название: {$arSection['NAME']}, Символьный код: {$arSection['CODE']}<br>";
}

4. Работа с несколькими элементами

Если нужно получить группы сразу для нескольких элементов:

$elementIds = [42, 43, 44];
$dbSections = CIBlockElement::GetElementGroups($elementIds);

while ($arSection = $dbSections->Fetch()) {
    echo "Элемент ID: {$arSection['IBLOCK_ELEMENT_ID']} -> Раздел ID: {$arSection['ID']}, Название: {$arSection['NAME']}<br>";
}

5. Обновление привязки элемента к разделам

Добавим новый раздел к элементу, сохранив старые привязки:

$elementId = 42;
$newGroupId = 10;

// Получаем текущие привязки
$dbOldGroups = CIBlockElement::GetElementGroups($elementId, true);
$arNewGroups = [$newGroupId];

while ($arGroup = $dbOldGroups->Fetch()) {
    $arNewGroups[] = $arGroup['ID'];
}

// Устанавливаем новые привязки
CIBlockElement::SetElementSection($elementId, $arNewGroups);

6. Генерация ссылок на разделы

Важно правильно обрабатывать URL, особенно если в них встречается макрос #SITE_DIR#.

Проблема:

Если использовать SECTION_PAGE_URL напрямую, может получиться ссылка вида:

https://site.ru/test1.php#SITE_DIR#/catalog/pants/

Рабочий код:

$elementId = 42;
$arSelect = ['ID', 'NAME', 'CODE', 'SECTION_PAGE_URL'];

$dbSections = CIBlockElement::GetElementGroups($elementId, false, $arSelect);

while ($arSection = $dbSections->Fetch()) {
    // Корректная замена #SITE_DIR#, #SECTION_CODE#, #SECTION_ID#
    $sectionUrl = str_replace(
        ['#SITE_DIR#', '#SECTION_CODE#', '#SECTION_ID#'],
        ['/', $arSection['CODE'], $arSection['ID']],
        $arSection['SECTION_PAGE_URL']
    );
    echo "<a href='{$sectionUrl}'>{$arSection['NAME']}</a><br>";
}

Теперь ссылка будет выглядеть корректно:

https://site.ru/catalog/pants/

Полезные советы

  • Используйте $arSelect для оптимизации производительности.
  • Флаг $bElementOnly позволяет игнорировать связи через свойства.
  • При выводе ссылок обязательно обрабатывайте #SITE_DIR# и другие макросы.
  • Для множественной обработки используйте массивы ID, чтобы минимизировать обращения к БД.

Возможные ошибки и как их избежать

Ошибка Причина Решение
Ссылки содержат #SITE_DIR# Макрос не обработан Замените вручную или используйте getSiteDir()
Элемент не имеет разделов Отсутствуют привязки Проверьте данные в админке
SQL-ошибка Некорректное значение $ID Передавайте только целые числа или массив целых чисел

Заключение

Метод CIBlockElement::GetElementGroups — мощный инструмент для работы с привязкой элементов к разделам. Он особенно полезен при реализации сложной структуры каталогов, фильтров, хлебных крошек и других функций, где важна древовидная организация данных.

Правильное использование этого метода поможет вам:

  • эффективно управлять структурой контента;
  • строить динамические URL;
  • создавать масштабируемые решения.

Рекомендация: всегда используйте GetElementGroups вместо ручных SQL-запросов — это повысит читаемость кода и совместимость с будущими версиями платформы.

Теги:  CIBlockElement, GetElementGroups, работа с URL, примеры использования


Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр