Главная » API Битрикс » CIBlockSection » CIBlockSection::GetList в Битрикс — получение разделов инфоблока

CIBlockSection::GetList в Битрикс — получение разделов инфоблока

Метод CIBlockSection::GetList() используется для получения списка разделов инфоблоков в 1С-Битрикс. С его помощью можно выбирать категории каталога, разделы новостей, дерево структуры сайта и любые другие разделы инфоблоков с использованием фильтрации, сортировки и постраничной навигации.

Краткий ответ

Для получения разделов инфоблока необходимо вызвать метод CIBlockSection::GetList(), указав параметры сортировки и фильтрации.

<?php

$res = CIBlockSection::GetList(
    ["SORT" => "ASC"],
    ["IBLOCK_ID" => 5]
);

while ($section = $res->Fetch()) {
    echo $section["NAME"]."<br>";
}

Описание функции

Метод выполняет выборку разделов инфоблока из базы данных и возвращает объект результата, который можно обрабатывать через методы Fetch(), GetNext() или GetNextElement().

CIBlockSection::GetList поддерживает фильтрацию по инфоблоку, активности, родительскому разделу, глубине вложенности, символьному коду и другим параметрам.

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

Нужна помощь с Битрикс?





    Синтаксис

    CIBlockResult CIBlockSection::GetList(
        array $arOrder = [],
        array $arFilter = [],
        bool $bIncCnt = false,
        array $arSelect = []
    );
    

    Параметры

    Параметр Тип Описание
    $arOrder array Массив сортировки результата.
    $arFilter array Фильтр разделов.
    $bIncCnt bool Подсчет количества элементов в разделе.
    $arSelect array Список выбираемых полей.

    Популярные поля фильтра

    Поле Описание
    IBLOCK_ID ID инфоблока.
    ACTIVE Активность раздела.
    ID ID раздела.
    SECTION_ID ID родительского раздела.
    CODE Символьный код раздела.
    DEPTH_LEVEL Уровень вложенности.
    GLOBAL_ACTIVE Активность с учетом родительских разделов.

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

    Получение всех разделов инфоблока

    <?php
    
    $res = CIBlockSection::GetList(
        ["LEFT_MARGIN" => "ASC"],
        [
            "IBLOCK_ID" => 5,
            "ACTIVE" => "Y"
        ]
    );
    
    while ($section = $res->Fetch()) {
        echo $section["NAME"]."<br>";
    }
    

    Получение дочерних разделов

    <?php
    
    $res = CIBlockSection::GetList(
        ["SORT" => "ASC"],
        [
            "IBLOCK_ID" => 5,
            "SECTION_ID" => 10
        ]
    );
    
    while ($section = $res->Fetch()) {
        print_r($section);
    }
    

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

    <?php
    
    $res = CIBlockSection::GetList(
        [],
        [
            "IBLOCK_ID" => 5,
            "CODE" => "notebooks"
        ]
    );
    
    $section = $res->Fetch();
    
    echo $section["ID"];
    

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

    <?php
    
    $res = CIBlockSection::GetList(
        [],
        [
            "IBLOCK_ID" => 5
        ],
        true
    );
    
    while ($section = $res->Fetch()) {
        echo $section["NAME"];
        echo " (".$section["ELEMENT_CNT"].")";
    }
    

    Выборка только нужных полей

    <?php
    
    $res = CIBlockSection::GetList(
        [],
        [
            "IBLOCK_ID" => 5
        ],
        false,
        [
            "ID",
            "NAME",
            "CODE"
        ]
    );
    

    Типичные ошибки

    Не указан IBLOCK_ID

    CIBlockSection::GetList(
        [],
        []
    );
    

    Без фильтра по инфоблоку запрос может вернуть большое количество ненужных данных.


    Использование SORT вместо LEFT_MARGIN для дерева

    ["SORT" => "ASC"]
    

    Для корректного построения дерева разделов рекомендуется использовать сортировку по LEFT_MARGIN.


    Ожидание количества элементов без bIncCnt

    $section["ELEMENT_CNT"]
    

    Поле ELEMENT_CNT будет доступно только при передаче третьего параметра true.


    Использование Fetch вместо GetNext

    Метод Fetch возвращает данные без HTML-обработки и дополнительных преобразований.

    $section = $res->GetNext();
    

    Для вывода данных в шаблонах чаще используется GetNext.

    Аналог на D7

    В новых проектах рекомендуется использовать ORM D7.

    <?php
    
    use Bitrix\Iblock\SectionTable;
    
    $result = SectionTable::getList([
        'select' => [
            'ID',
            'NAME',
            'CODE'
        ],
        'filter' => [
            '=IBLOCK_ID' => 5,
            '=ACTIVE' => 'Y'
        ],
        'order' => [
            'LEFT_MARGIN' => 'ASC'
        ]
    ]);
    
    while ($section = $result->fetch()) {
        print_r($section);
    }
    

    ORM обеспечивает более удобную работу с выборками и соответствует современным стандартам разработки на Битрикс.

    FAQ

    Что возвращает CIBlockSection::GetList?

    Метод возвращает объект выборки CIBlockResult.

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

    [
        "IBLOCK_ID" => 5,
        "CODE" => "catalog"
    ]
    

    Как получить только активные разделы?

    [
        "ACTIVE" => "Y"
    ]
    

    Как узнать количество элементов в разделе?

    Передайте третий параметр метода со значением true и используйте поле ELEMENT_CNT.

    Как получить дерево разделов?

    Используйте сортировку по полю LEFT_MARGIN.

    [
        "LEFT_MARGIN" => "ASC"
    ]
    

    Что использовать в новых проектах?

    Для новых разработок рекомендуется использовать Bitrix\Iblock\SectionTable и ORM D7. Метод CIBlockSection::GetList остается актуальным для поддержки существующих проектов и готовых решений на 1С-Битрикс.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    Инструменты
    База знаний