CIBlockElement::GetList

CIBlockElement::GetList — один из старых, но до сих пор рабочих способов получить элементы инфоблока в Битрикс. Например, вывести последние новости, список производителей или несколько товаров.

Для новичка важно не пытаться сразу достать «всё». Сначала выберем только нужные поля и активные элементы. Так код будет понятнее, а запрос — легче.

Что нужно знать до начала

Нужен ID инфоблока. Его можно посмотреть в административной части в списке инфоблоков. В примере ниже ID новостей равен 1. В своём проекте подставьте свой ID.

Пример ID инфоблока в адресной строке административной части Битрикс
В старой административной части ID часто виден в адресе после IBLOCK_ID=.

Самый простой базовый пример

Код можно поставить в шаблон компонента или в свой PHP-файл, который уже подключён через Битрикс. Сначала подключаем модуль iblock. Потом описываем сортировку, фильтр и поля, которые хотим получить.

<?php
if (CModule::IncludeModule('iblock')) {
    $arOrder = array('SORT' => 'ASC', 'ID' => 'DESC');
    $arFilter = array(
        'IBLOCK_ID' => 1,
        'ACTIVE' => 'Y',
        'ACTIVE_DATE' => 'Y',
        'CHECK_PERMISSIONS' => 'Y',
        'MIN_PERMISSION' => 'R',
    );
    $arSelect = array('ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL');

    $result = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);

    while ($item = $result->GetNext(false)) {
        ?>
        <a href="<?=htmlspecialcharsbx($item['DETAIL_PAGE_URL'])?>">
            <?=htmlspecialcharsbx($item['NAME'])?>
        </a><br>
        <?php
    }
}
?>

В $arFilter мы оставили только элементы нужного инфоблока, которые активны и попадают в период публикации. В $arSelect указали только поля, которые выводим. По документации для корректной выборки стоит включать ID и IBLOCK_ID.

CHECK_PERMISSIONS => 'Y' включает проверку доступа, а MIN_PERMISSION => 'R' требует право чтения. Активность элемента сама по себе не означает, что его можно показывать каждому посетителю.

Почему нужен htmlspecialcharsbx

Обычный GetNext() уже экранирует значения. Здесь мы специально передали false, чтобы получить исходный текст, и экранируем его при выводе. Не применяйте оба способа одновременно: иначе амперсанд и кавычки могут отображаться неправильно. Подстановка шаблонов в DETAIL_PAGE_URL сохраняется.

Название новости заполняет редактор сайта. В нём могут случайно оказаться кавычки или HTML. Перед выводом в страницу используйте htmlspecialcharsbx(): функция превращает специальные символы в безопасный текст. Это полезная привычка, особенно если данные не пишете лично вы.

Не убирайте эту функцию только потому, что «у нас редакторы аккуратные». Ошибка обычно появляется позже, когда контент меняет другой человек.

Как вывести только пять последних новостей

Меняем сортировку и добавляем ограничение в четвёртый параметр:

<?php
$arOrder = array('ACTIVE_FROM' => 'DESC', 'ID' => 'DESC');
$arNav = array('nTopCount' => 5);

$result = CIBlockElement::GetList(
    $arOrder,
    $arFilter,
    false,
    $arNav,
    $arSelect
);
?>

Не передавайте пустой массив вместо четвёртого параметра «на всякий случай». В этом методе пустой массив означает ограничение на десять элементов. Если ограничение не нужно, передавайте false.

Что часто ломается

  • Забыли подключить модуль iblock — метод не найден.
  • Указали чужой ID инфоблока — цикл отработает, но данных не будет.
  • Не добавили ACTIVE => 'Y' — можно случайно показать скрытый материал.
  • Выбрали все поля и свойства без причины — страница может работать медленнее.
  • Вывели NAME без экранирования — получили риск сломать HTML страницы.

Когда лучше взять компонент

Если нужна пагинация, кеширование, фильтр из формы, комплексные права или красивый вывод, сначала посмотрите штатный компонент. Самописный GetList хорош для маленького понятного блока. Не надо писать двадцать строк кода ради ссылки на одну новость, но и не стоит превращать простой блок в огромный компонент без причины.

Перед использованием проверьте пример на тестовой копии своего проекта: права, шаблоны адресов и состав полей зависят от его настроек.

Статья обновлена 3 октября 2026 года. Параметры метода и поведение четвёртого параметра сверены с официальной документацией CIBlockElement::GetList.

CIBlockElement::GetList: 6 комментариев

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

    1. модифицировать шаблон компонента.
      Чтобы ответить конкретнее нужны доступы к проекту.

    1. if (CModule::IncludeModule("iblock")){
      $res = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>1), Array("PROPERTY_1"));
      while($ob = $res->GetNext()){
      ?>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пожалуйста, докажите, что вы не робот * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Хостинг Timeweb