В современном веб-развитии на базе 1С-Битрикс всё чаще встречается необходимость обращаться к данным инфоблоков, используя подход D7. Этот подход даёт программистам более гибкие и удобные инструменты, а также повышает производительность и читаемость кода за счёт ORM (Object-Relational Mapping).

В данной статье рассмотрим, как получить информацию об инфоблоке по его ID, используя Bitrix D7. Разберём популярные сценарии и приведём несколько примеров кода.
1. Ключевые моменты при работе с D7
- Подключение модуля
iblock
.В любом скрипте или компоненте, прежде чем работать с классами
Bitrix\Iblock\...
, нужно убедиться, что модуль инфоблоков загружен:use Bitrix\Main\Loader; Loader::includeModule('iblock');
- Использование пространства имён.
Новая концепция D7 предусматривает организацию классов по пространствам имён. Для инфоблоков используется:
use Bitrix\Iblock\IblockTable;
Это позволяет работать с таблицей инфоблоков через ORM.
- Метод
getList
.Основной метод, применяемый для выборки данных, — это
getList()
. С его помощью можно настроить фильтрацию (filter
), сортировку (order
) и выборку полей (select
).
2. Простой пример получения данных об инфоблоке
Допустим, у нас есть инфоблок с ID = 2, и мы хотим получить основную информацию о нём (название, символьный код, идентификатор и т. д.).
use Bitrix\Main\Loader;
use Bitrix\Iblock\IblockTable;
Loader::includeModule('iblock');
// Указываем ID инфоблока
$iblockId = 2;
// Получаем информацию об инфоблоке
$iblock = IblockTable::getList([
'filter' => ['ID' => $iblockId],
'select' => ['*'] // '*' означает выбор всех полей
])->fetch();
// Вывод полученных данных
if ($iblock) {
echo '';
print_r($iblock);
echo '
';
} else {
echo 'Инфоблок с таким ID не найден.';
}
В результате мы получим массив с данными по инфоблоку, например:
Array
(
[ID] => 2
[TIMESTAMP_X] => 2025-04-08 12:00:00
[IBLOCK_TYPE_ID] => news
[LID] => s1
[CODE] => news_company
[NAME] => Новости компании
// и другие поля...
)
3. Добавление условий фильтрации и сортировки
Часто требуется получать не просто данные по ID, а, например, найти несколько инфоблоков по определённому типу или с определённым названием. В таких случаях можно расширить фильтр, добавить сортировку и другие параметры:
use Bitrix\Main\Loader;
use Bitrix\Iblock\IblockTable;
Loader::includeModule('iblock');
$iblockType = 'news'; // например, тип инфоблока "Новости"
// Получаем список инфоблоков определённого типа
$result = IblockTable::getList([
'filter' => ['IBLOCK_TYPE_ID' => $iblockType],
'select' => ['ID', 'NAME', 'CODE'],
'order' => ['NAME' => 'ASC'], // сортировка по названию по возрастанию
]);
while ($iblock = $result->fetch()) {
echo 'ID: ' . $iblock['ID'] . '
';
echo 'NAME: ' . $iblock['NAME'] . '
';
echo 'CODE: ' . $iblock['CODE'] . '
';
}
В этом примере:
filter
указывает, что нам нужны инфоблоки только типаnews
.select
отвечает за выборку конкретных полей, здесь выбираемID
,NAME
иCODE
.order
устанавливает сортировку по имени.
4. Пример использования с дополнительной обработкой данных
Предположим, что нам не только нужно вывести информацию, но и сделать с ней какие-то преобразования. Например, преобразовать дату изменения инфоблока к нужному формату, прежде чем передавать её в шаблон.
use Bitrix\Main\Loader;
use Bitrix\Iblock\IblockTable;
Loader::includeModule('iblock');
$iblockId = 2;
$iblockData = IblockTable::getList([
'filter' => ['ID' => $iblockId],
'select' => ['ID', 'CODE', 'NAME', 'TIMESTAMP_X']
])->fetch();
if ($iblockData) {
// Преобразуем дату
$timestamp = strtotime($iblockData['TIMESTAMP_X']);
$formattedDate = date('d.m.Y H:i:s', $timestamp);
echo 'ID: ' . $iblockData['ID'] . '
';
echo 'CODE: ' . $iblockData['CODE'] . '
';
echo 'NAME: ' . $iblockData['NAME'] . '
';
echo 'Обновлено: ' . $formattedDate . '
';
} else {
echo 'Инфоблок не найден';
}
5. Частые ошибки и их исправление
- Отсутствие подключения модуля
iblock
.Всегда проверяйте, что вы используете:
use Bitrix\Main\Loader; Loader::includeModule('iblock');
Без этого доступ к классам
Bitrix\Iblock\IblockTable
будет невозможен. - Неправильное использование пространства имён.
Если вы не пишете
use Bitrix\Iblock\IblockTable;
, при вызовеIblockTable
может возникнуть ошибкаClass not found
. - Опечатки в ключах фильтра (например,
ID
vsId
, использование неверных полей). В D7 используется строгая типизация и точные названия полей, как в базе данных, так и в ORM-классах. - Забытые точка с запятой и скобки при написании PHP-кода. Иногда опечатка или пропущенная скобка приводит к фатальным ошибкам. Используйте IDE с автодополнением и подсветкой синтаксиса.
6. Дополнительно: получение настроек инфоблока
Выше мы рассмотрели извлечение основных полей (ID, CODE, NAME). Но иногда нужно получить и дополнительные настройки инфоблока, вроде флага индексации, пути к разделам или описание. В таком случае указываем нужные поля в select
:
use Bitrix\Main\Loader;
use Bitrix\Iblock\IblockTable;
Loader::includeModule('iblock');
$iblockId = 2;
$iblock = IblockTable::getList([
'filter' => ['ID' => $iblockId],
'select' => [
'ID',
'NAME',
'CODE',
'LIST_PAGE_URL',
'SECTION_PAGE_URL',
'DETAIL_PAGE_URL',
'WORKFLOW',
'INDEX_ELEMENT'
]
])->fetch();
if ($iblock) {
echo 'Инфоблок: ' . $iblock['NAME'] . ' (ID: ' . $iblock['ID'] . ')
';
echo 'Символьный код: ' . $iblock['CODE'] . '
';
echo 'URL для списка: ' . $iblock['LIST_PAGE_URL'] . '
';
echo 'URL для разделов: ' . $iblock['SECTION_PAGE_URL'] . '
';
echo 'URL для детального просмотра: ' . $iblock['DETAIL_PAGE_URL'] . '
';
echo 'Документооборот включён: ' . ($iblock['WORKFLOW'] ? 'Да' : 'Нет') . '
';
echo 'Индексация элементов: ' . ($iblock['INDEX_ELEMENT'] ? 'Да' : 'Нет') . '
';
} else {
echo 'Инфоблок не найден.';
}
7. Вывод инфоблоков в компоненте или шаблоне
На практике код для получения информации об инфоблоке часто размещается в компоненте или файле component.php
. Пример минималистичного компонента:
Файл .parameters.php
: (задаёт параметр для компонента)
$arComponentParameters = [
'PARAMETERS' => [
'IBLOCK_ID' => [
'PARENT' => 'BASE',
'NAME' => 'ID инфоблока',
'TYPE' => 'STRING',
'DEFAULT' => '2',
],
],
];
Файл component.php
:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
use Bitrix\Main\Loader;
use Bitrix\Iblock\IblockTable;
class MyIblockInfoComponent extends CBitrixComponent
{
public function executeComponent()
{
if (!Loader::includeModule('iblock')) {
ShowError('Модуль iblock не подключен');
return;
}
$iblockId = (int)$this->arParams['IBLOCK_ID'];
$iblock = IblockTable::getList([
'filter' => ['ID' => $iblockId],
'select' => ['ID', 'NAME', 'CODE', 'TIMESTAMP_X']
])->fetch();
$this->arResult['IBLOCK'] = $iblock;
$this->IncludeComponentTemplate();
}
}
Файл template.php
: (шаблон компонента)
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
$iblock = $arResult['IBLOCK'];
if ($iblock):
?>
<div>
<p><strong>ID инфоблока:</strong> <?= htmlspecialchars($iblock['ID']) ?></p>
<p><strong>Название:</strong> <?= htmlspecialchars($iblock['NAME']) ?></p>
<p><strong>Символьный код:</strong> <?= htmlspecialchars($iblock['CODE']) ?></p>
<p><strong>Обновлён:</strong> <?= htmlspecialchars($iblock['TIMESTAMP_X']) ?></p>
</div>
<?php
else:
?>
<p>Инфоблок не найден</p>
<?php
endif;
?>
Такой подход упрощает повторное использование кода и делает его удобным для дальнейшего сопровождения.
8. Заключение
Работа с инфоблоками через D7 (ORM) в 1С-Битрикс даёт большое количество преимуществ:
- Читаемый и лаконичный код.
- Гибкие настройки фильтрации, сортировки и выборки нужных полей.
- Единый подход для работы с различными сущностями, что упрощает поддержку и масштабирование проектов.
При этом нужно помнить о корректном подключении модуля и следить за правильностью названий полей и пространств имён.
Надеемся, что приведённые примеры помогут вам быстрее и проще интегрировать функционал по работе с инфоблоками в ваши проекты на 1С-Битрикс!
Удачи в разработке!