Middle Инфоблоки: D7 и продвинутое Обязательно

API инфоблоков на D7

Доступ к элементам инфоблока через D7 ORM реализуется сгенерированным классом Bitrix\Iblock\Elements\Element{ApiCode}Table на основе параметра API_CODE. В отличие от классического API, сохранение через ORM выполняет только прямую запись в базу и требует ручного вызова обновления поискового индекса, фасетов и сброса тегированного кеша.

Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.

Что нужно понимать

  • 1
    \Bitrix\Iblock\Iblock
  • 2
    \Bitrix\Iblock\Elements
  • 3
    ORM для инфоблоков

Материалы

Проверь себя

Импорт через ORM отработал без ошибок, а заказчик жалуется, что новые товары не ищутся на сайте и не попадают в умный фильтр. Где искать?

В том, чего ORM инфоблоков не делает: он не обновляет поисковый индекс, фасетный индекс, SEO-поля и не сбрасывает тегированный кеш. После save() это делают руками — CIBlockElement::UpdateSearch(), PropertyIndex Manager::updateElementIndex() — либо запись оставляют на классическом API.

Свойство есть в админке, но $element->get('BRAND') падает с ошибкой неизвестного поля. Почему?

В карту Element{ApiCode}Table попадают только свойства с заполненным CODE, а сам класс существует только у инфоблока с API_CODE. Проверьте оба поля и вызовите IblockTable::compileEntity(), если класс ещё не собран в этом хите.

Чем set('PHOTO', 123) отличается от set('PHOTO', new PropertyValue(123, 'Описание')) и почему первый вариант плох?

Для файловых свойств ORM ожидает объект Bitrix Iblock ORM PropertyValue с ID файла и описанием; число не даст записать описание. Сам файл кладут через CFile::SaveFile(), а миниатюры ORM не делает — CFile::ResizeImage() отдельно.

Зачем в проекте команда orm:annotate, если код и так работает?

Классы Element{ApiCode}Table и их объекты генерируются на лету, и IDE их не видит: нет подсказок по getBrand() и setName(). Команда создаёт файл аннотаций с описанием сгенерированных классов, чтобы автодополнение и статический анализ работали.

Не сходится?

Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти