Главная страница / Блог / Как получить ID раздела в 1С-Битрикс
1С-Битрикс

Как получить ID раздела в 1С-Битрикс

30 июня 2026 0 минут чтения 3438 просмотров

Во время разработки на 1С-Битрикс довольно часто возникает необходимость получить ID раздела инфоблока. Сделать это можно несколькими способами: по символьному коду, через элемент инфоблока, из параметров компонента или с помощью D7 API.

В этой статье рассмотрим самые распространенные варианты с готовыми примерами кода.

Получить ID раздела по символьному коду

Это один из самых популярных способов. Он подойдет, если известен символьный код (CODE) раздела.

<?
if (CModule::IncludeModule("iblock"))
{
    $iblockId = 10;
    $sectionCode = "section_code";

    $arFilter = [
        "IBLOCK_ID" => $iblockId,
        "=CODE" => $sectionCode
    ];

    $rsSection = CIBlockSection::GetList(
        [],
        $arFilter,
        false,
        ["ID"]
    );

    if ($arSection = $rsSection->GetNext())
    {
        echo $arSection["ID"];
    }
    else
    {
        echo "Раздел не найден";
    }
}
?>

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

Получить ID раздела из элемента инфоблока

Если известен ID элемента, получить раздел еще проще. Практически каждый элемент хранит идентификатор своего основного раздела.

<?
if (CModule::IncludeModule("iblock"))
{
    $elementId = 123;

    $arSelect = [
        "ID",
        "IBLOCK_SECTION_ID"
    ];

    $arFilter = [
        "ID" => $elementId
    ];

    $res = CIBlockElement::GetList([], $arFilter, false, false, $arSelect);

    if ($ob = $res->GetNextElement())
    {
        $arFields = $ob->GetFields();

        echo $arFields["IBLOCK_SECTION_ID"];
    }
}
?>

Получить ID раздела на странице раздела

Если используется стандартный компонент catalog.section или news, то дополнительный запрос к базе данных обычно вообще не нужен.

В большинстве случаев ID текущего раздела уже находится в массиве $arResult.

<?
echo $arResult["ID"];
?>

Это самый быстрый способ, так как не выполняет дополнительных SQL-запросов.

Получить ID раздела на детальной странице элемента

На детальной странице товара или новости чаще всего требуется узнать раздел, к которому относится текущий элемент.

Стандартный компонент уже предоставляет эту информацию.

<?
echo $arResult["IBLOCK_SECTION_ID"];
?>

Во многих случаях этого вполне достаточно и выполнять повторный запрос через API нет никакого смысла.

Получить ID раздела через D7 API

В новых проектах вместо старого API все чаще используется D7. Получить раздел можно следующим образом.

<?
use Bitrix\Iblock\SectionTable;

$section = SectionTable::getList([
    "filter" => [
        "=IBLOCK_ID" => 10,
        "=CODE" => "section_code"
    ],
    "select" => [
        "ID"
    ]
])->fetch();

if ($section)
{
    echo $section["ID"];
}
?>

D7 API считается более современным подходом и рекомендуется для новых проектов.

Какой способ выбрать?

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

  • Известен символьный код раздела
    Используйте CIBlockSection::GetList(). Это самый простой и универсальный вариант.
  • Вы находитесь на странице раздела
    Обычно ID уже доступен в $arResult["ID"], поэтому дополнительный запрос к базе данных не требуется.
  • Вы находитесь на детальной странице элемента
    В большинстве компонентов ID раздела уже хранится в $arResult["IBLOCK_SECTION_ID"].
  • Известен ID элемента инфоблока
    Получите поле IBLOCK_SECTION_ID через CIBlockElement::GetList().
  • Разрабатываете новый проект
    Лучше использовать D7 API и класс Bitrix\Iblock\SectionTable.

Заключение

Во многих случаях разработчики делают лишний запрос к базе данных, хотя нужный ID уже находится в массиве $arResult. Поэтому перед использованием API рекомендую сначала проверить, какие данные уже передает используемый компонент. Это позволит немного снизить количество SQL-запросов и сделать код чище.

Комментарии

Будем рады вашему мнению и вопросам по статье.