Метод 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-запросов — это повысит читаемость кода и совместимость с будущими версиями платформы.