Документация

Обзор

Работу с инфоблоками в библиотеке ведут четыре класса. Разница между ними — не в наборе полей, а в том, где живёт результат.

Класс Когда брать
DevBx\Core\Iblock всё остальное: элементы, разделы, поиск и создание свойств, разбор значений из выгрузки
DevBx\Core\IBlockElement список элементов, который отдаётся часто, а меняется редко
DevBx\Core\IBlockSection то же для разделов
DevBx\Core\IblockProperties описание свойств инфоблока: типы, коды, значения списков

Подключение модуля

php
use DevBx\Core\Iblock;

if (!Iblock::includeModule()) {
    return;
}

Iblock::includeModule() — это Loader::includeModule('iblock') с запоминанием результата: второй и последующие вызовы отвечают из статической переменной. Методы Iblock, IBlockElement и IBlockSection зовут его сами и возвращают false, если модуль не установлен. Вызывать вручную нужно только перед собственными обращениями к CIBlock*.

Три уровня кэша

Понимать, какой уровень сработал, важнее, чем помнить сроки: они разные, а сбрасываются по-разному.

Память запроса. Статические массивы внутри IblockgetElement, getSection, getSectionsArray, getRootSection, geSectionChildIDArray, getSectionByName и внутренний справочник свойств. Сюда же экземпляры IblockProperties и IblockPropertyEnum. Живут до конца запроса, сбрасываются только там, где есть refresh().

Файловый кэш. Iblock::getIblockItems — час, Catalog::getCatalogItems — час и только по запросу, IBlockElement и IBlockSection — сутки. Ключ записи — serialize() от всех аргументов. Отсюда правило: два вызова, отличающихся только порядком ключей в фильтре, займут разные записи, а объект или замыкание в фильтре сделает ключ непредсказуемым.

Тегированный кэш. При включённом управляемом кэше (BX_COMP_MANAGED_CACHE) записи помечаются тегами iblock_id_<номер>, и правка элемента в админке гасит их сама. Управляемый кэш выключен — остаётся только срок жизни, и правка увидится через сутки.

Настройки

Настройка По умолчанию Что задаёт
iblock_cache_disabled N Y — выключает кэш IBlockElement и IBlockSection
ib_element_cache_time 86400 срок жизни кэша элементов, секунды
ib_section_cache_time 86400 срок жизни кэша разделов, секунды

Ни одной из них нет на странице настроек модуля — они задаются только из кода:

php
\Bitrix\Main\Config\Option::set('devbx.core', 'iblock_cache_disabled', 'Y');