Торговые предложения
Два метода DevBx\Core\Catalog для работы с торговыми предложениями.
Предложение с наименьшей ценой
use DevBx\Core\Catalog;
$offers = Catalog::getCatalogItems($offersIblockId, [], $filter, $select, $prices);
$cheapest = Catalog::getMinOffer($offers);
getMinOffer ждёт список в том виде, в каком его отдаёт getCatalogItems: сравнивается
MIN_PRICE['DISCOUNT_VALUE'], то есть цена со скидкой. Предложения без заполненного MIN_PRICE
пропускаются. Подходящих нет — вернётся false.
Метод возвращает предложение целиком, а не цену: карточке товара обычно нужно и то и другое.
От предложения к товару
$products = Catalog::getProductsByOffers([120, 121, 305]);
// [120 => 12, 121 => 12, 305 => 44]
Возвращает карту «номер предложения — номер товара». Работает так: читает предложения через
Iblock::getIblockItems, группирует их по инфоблокам, для каждого инфоблока спрашивает у
CCatalogSKU::GetInfoByOfferIBlock свойство связи и читает его значение.
- Предложения из разных инфоблоков обрабатываются за один вызов — группировка внутри.
- Инфоблок, у которого связь с товарами не настроена, пропускается молча: в ответе его предложений просто не будет.
- Ни одного предложения не нашлось — вернётся пустой массив.
Обратите внимание: чтение идёт через Iblock::getIblockItems, а он кэширует на час. Только что
созданное предложение может не найтись.