Iblock
Класс: Xpage\Core\Iblock
Назначение: Централизованная утилита для получения структуры инфоблоков. Позволяет избавиться от «магических чисел» (ID) в коде, заменяя их на читаемые API-коды, и минимизирует нагрузку на базу данных.
Зависимости:
- Модуль:
iblock. - Ядро:
Bitrix\Main,Bitrix\Iblock.
Идентификация Инфоблоков
getIblockIdByApiCode(string $apiCode): Возвращает ID инфоблока по егоAPI_CODE.getIblockCodeById(int $iblockId): Возвращает символьный код (CODE) инфоблока по его ID.getIblockApiCodeById(int $iblockId): ВозвращаетAPI_CODEинфоблока по его ID.
Работа со свойствами
getProperties(string $iblockCode): Получает список всех свойств инфоблока (ID, код, тип, множественность).- Если свойство является списком (
TYPE_LIST), метод автоматически подгружает все варианты значений черезgetMapEnumPropertyValues.
- Если свойство является списком (
getMapEnumPropertyValues(int $propertyId): Создает карту соответствий для свойств типа «Список».- Возвращает два массива:
ID_TO_XMLID(перевод числового ID значения в строковый код) иXMLID_TO_ID(наоборот).
- Возвращает два массива:
Примеры использования
Получение ID инфоблока по API коду
use Xpage\Core\Iblock;
$iblockId = Iblock::getIblockIdByApiCode('catalog_products');
if ($iblockId) {
// Используем ID для запросов
}
Получение метаданных свойств и работа со списками
use Xpage\Core\Iblock;
// Получаем все свойства инфоблока новостей
$props = Iblock::getProperties('news_api_code');
// Если у нас есть свойство типа "Список" с кодом 'COLOR'
if (isset($props['COLOR']['MAP_VALUES'])) {
// Получим ID значения, зная его XML_ID
$colorId = $props['COLOR']['MAP_VALUES']['XMLID_TO_ID']['RED'];
// Или наоборот: узнаем код значения, зная ID из базы
$colorXmlId = $props['COLOR']['MAP_VALUES']['ID_TO_XMLID'][42];
}
Технические детали
static $cache: Используется для предотвращения повторных запросов к БД и даже к системе кэширования в рамках одного выполнения скрипта.self::$ttl: Установлен на огромный период (8 лет), что делает выборку практически мгновенной после первого обращения. При изменении настроек инфоблоков в админке может потребоваться сброс кэша.IblockTable,PropertyTable,PropertyEnumerationTable: Используются стандартные ORM-сущности модуляiblock.