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

Товары с ценами

DevBx\Core\Catalog::getCatalogItems собирает то, что обычно приходится собирать вручную: элементы, их свойства, цены по типам и минимальную цену — за один вызов.

Нужен модуль catalog. Без него метод возвращает пустой массив, а не ошибку.

Вызов

php
use DevBx\Core\Catalog;

$prices = \CIBlockPriceTools::GetCatalogPrices($iblockId, ['BASE']);

$items = Catalog::getCatalogItems(
    $iblockId,
    ['SORT' => 'ASC'],
    ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y'],
    ['ID', 'NAME', 'DETAIL_PAGE_URL'],
    $prices,
    true,   // цены с налогом
    [],     // параметры пересчёта валюты
    true,   // кэшировать
    20,     // ограничение
);

Полная подпись: getCatalogItems($iblockId, $arSort, $arFilter, $arSelect = [], $arPrices = [], $priceVatInclude = true, $arConvertParams = [], $useCache = false, $limit = 0).

Что приходит в ответе

Массив элементов, ключ — номер элемента. К обычным полям выборки добавляются:

Ключ Что внутри
CATALOG_QUANTITY остаток, дописывается в выборку всегда
PROPERTIES свойства, дочитанные пакетно одним запросом на весь список
PRICES цены по типам — результат CIBlockPriceTools::GetItemPrices
MIN_PRICE цена, отмеченная как минимальная, иначе минимальная из списка, иначе false
DISPLAY_PROPERTIES, PRODUCT_PROPERTIES, PRODUCT_PROPERTIES_FILL заводятся пустыми, заполняет вызывающий код

Типы цен берутся из $arPrices в том виде, в каком их отдаёт CIBlockPriceTools::GetCatalogPrices. В выборку попадают только те, что текущему посетителю разрешено видеть или покупать, — остальные пропускаются.

Кэш

Включается девятым аргументом. Срок — час, тег — iblock_catalog, и при включённом управляемом кэше правка товара его гасит. Ключ складывается из всех аргументов, включая типы цен: у групп посетителей с разными правами на цены получаются разные записи, и чужие цены не покажутся.

По умолчанию кэш выключен. Это разумное умолчание для страницы, где цены меняются в течение дня, но для витрины его стоит включить.