Элементы
Методы DevBx\Core\Iblock, работающие с элементами. Все статические, все сначала подключают
модуль iblock и возвращают false, если его нет.
Один элемент
use DevBx\Core\Iblock;
$element = Iblock::getElement($elementId); // поля
$element = Iblock::getElement($elementId, true); // поля и PROPERTIES
getElement($elementId, $bGetProperties = false) держит прочитанное в памяти запроса, ключ
складывается из номера и признака свойств — то есть один и тот же элемент с полями и без них
читается дважды. Файлы не разворачиваются: PREVIEW_PICTURE и DETAIL_PICTURE остаются
номерами.
Список элементов
$items = Iblock::getIblockItems(
['SORT' => 'ASC'],
['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y'],
['ID', 'NAME', 'DETAIL_PAGE_URL'],
20,
);
Подпись: getIblockItems($arSort, $arFilter, $arSelect, $limit = 0, $arGroup = false, $bSkipCache = false, $keyField = 'ID').
- Результат — массив, ключ берётся из
$keyField. Поля нет в выборке — элемент попадёт в массив с числовым ключом. IBLOCK_IDдописывается в выборку всегда: по нему проставляются теги кэша.$limitпревращается вnTopCount.- Результат кладётся в файловый кэш на час под тегом
iblock_catalog. Обойти кэш —$bSkipCache = true. - Значения
IDв фильтре приводятся к целым: иID, и=ID.
Элементы вместе со свойствами
$items = Iblock::getItemsWithProperties($iblockId, ['ACTIVE' => 'Y']);
Читает ID, NAME, оба анонса и оба изображения, разворачивает картинки через
CFile::GetFileArray и дочитывает свойства пакетно — одним запросом на весь список, а не
запросом на элемент. Значения свойств типа «справочник» подменяются записями справочника через
HighloadHelper. Кэша у метода нет.
Значения одного свойства
$values = Iblock::getPropertyValues($iblockId, $elementId, 'COLOR');
Код свойства можно передать и номером. Возвращает массив значений — и для одиночного свойства тоже.
Символьный код
$code = Iblock::getCodeForElement($iblockId, 'Красный чайник');
Транслитерация по настройкам самого инфоблока (длина, регистр, замена пробелов). Если код занят,
к нему приписывается _2, _3 и так далее — до свободного. Метод обращается к базе на каждой
попытке, поэтому в цикле по тысячам элементов он дорог.
Значение «как в выгрузке»
$value = Iblock::convertPropertyValue($iblockId, 'BRAND', 'Синий');
Принимает человекочитаемое значение и возвращает то, что примет свойство:
| Тип свойства | Что вернётся |
|---|---|
F (файл) |
массив CFile::MakeFileArray — путь от корня сайта или адрес, начинающийся с http |
E (привязка к элементу) |
номер элемента привязанного инфоблока |
L (список) |
номер значения списка |
S + directory (справочник) |
UF_XML_ID записи справочника |
| остальные | исходная строка |
Метод пишет в базу. Не нашёл значения списка — добавит его. Не нашёл элемента привязки — создаст элемент. Не нашёл записи справочника — заведёт её. Для разбора выгрузки это ровно то, что нужно; в обработчике на публичной части — способ незаметно засорить справочники.
Пустая строка возвращается как false, не как пустое значение.