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

Элементы

Методы DevBx\Core\Iblock, работающие с элементами. Все статические, все сначала подключают модуль iblock и возвращают false, если его нет.

Один элемент

php
use DevBx\Core\Iblock;

$element = Iblock::getElement($elementId);               // поля
$element = Iblock::getElement($elementId, true);         // поля и PROPERTIES

getElement($elementId, $bGetProperties = false) держит прочитанное в памяти запроса, ключ складывается из номера и признака свойств — то есть один и тот же элемент с полями и без них читается дважды. Файлы не разворачиваются: PREVIEW_PICTURE и DETAIL_PICTURE остаются номерами.

Список элементов

php
$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.

Элементы вместе со свойствами

php
$items = Iblock::getItemsWithProperties($iblockId, ['ACTIVE' => 'Y']);

Читает ID, NAME, оба анонса и оба изображения, разворачивает картинки через CFile::GetFileArray и дочитывает свойства пакетно — одним запросом на весь список, а не запросом на элемент. Значения свойств типа «справочник» подменяются записями справочника через HighloadHelper. Кэша у метода нет.

Значения одного свойства

php
$values = Iblock::getPropertyValues($iblockId, $elementId, 'COLOR');

Код свойства можно передать и номером. Возвращает массив значений — и для одиночного свойства тоже.

Символьный код

php
$code = Iblock::getCodeForElement($iblockId, 'Красный чайник');

Транслитерация по настройкам самого инфоблока (длина, регистр, замена пробелов). Если код занят, к нему приписывается _2, _3 и так далее — до свободного. Метод обращается к базе на каждой попытке, поэтому в цикле по тысячам элементов он дорог.

Значение «как в выгрузке»

php
$value = Iblock::convertPropertyValue($iblockId, 'BRAND', 'Синий');

Принимает человекочитаемое значение и возвращает то, что примет свойство:

Тип свойства Что вернётся
F (файл) массив CFile::MakeFileArray — путь от корня сайта или адрес, начинающийся с http
E (привязка к элементу) номер элемента привязанного инфоблока
L (список) номер значения списка
S + directory (справочник) UF_XML_ID записи справочника
остальные исходная строка

Метод пишет в базу. Не нашёл значения списка — добавит его. Не нашёл элемента привязки — создаст элемент. Не нашёл записи справочника — заведёт её. Для разбора выгрузки это ровно то, что нужно; в обработчике на публичной части — способ незаметно засорить справочники.

Пустая строка возвращается как false, не как пустое значение.