Товары с ценами
DevBx\Core\Catalog::getCatalogItems собирает то, что обычно приходится собирать вручную:
элементы, их свойства, цены по типам и минимальную цену — за один вызов.
Нужен модуль catalog. Без него метод возвращает пустой массив, а не ошибку.
Вызов
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, и при включённом управляемом
кэше правка товара его гасит. Ключ складывается из всех аргументов, включая типы цен: у групп
посетителей с разными правами на цены получаются разные записи, и чужие цены не покажутся.
По умолчанию кэш выключен. Это разумное умолчание для страницы, где цены меняются в течение дня, но для витрины его стоит включить.