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

Торговые предложения

Два метода DevBx\Core\Catalog для работы с торговыми предложениями.

Предложение с наименьшей ценой

php
use DevBx\Core\Catalog;

$offers = Catalog::getCatalogItems($offersIblockId, [], $filter, $select, $prices);
$cheapest = Catalog::getMinOffer($offers);

getMinOffer ждёт список в том виде, в каком его отдаёт getCatalogItems: сравнивается MIN_PRICE['DISCOUNT_VALUE'], то есть цена со скидкой. Предложения без заполненного MIN_PRICE пропускаются. Подходящих нет — вернётся false.

Метод возвращает предложение целиком, а не цену: карточке товара обычно нужно и то и другое.

От предложения к товару

php
$products = Catalog::getProductsByOffers([120, 121, 305]);
// [120 => 12, 121 => 12, 305 => 44]

Возвращает карту «номер предложения — номер товара». Работает так: читает предложения через Iblock::getIblockItems, группирует их по инфоблокам, для каждого инфоблока спрашивает у CCatalogSKU::GetInfoByOfferIBlock свойство связи и читает его значение.

  • Предложения из разных инфоблоков обрабатываются за один вызов — группировка внутри.
  • Инфоблок, у которого связь с товарами не настроена, пропускается молча: в ответе его предложений просто не будет.
  • Ни одного предложения не нашлось — вернётся пустой массив.

Обратите внимание: чтение идёт через Iblock::getIblockItems, а он кэширует на час. Только что созданное предложение может не найтись.