- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/product/catalogprovider.php
- Класс: BitrixCatalogProductCatalogProvider
- Вызов: CatalogProvider::getCatalogProducts
static function getCatalogProducts(array $list, array $select): array
{
$usedStoreInventory = CatalogConfigState::isUsedInventoryManagement();
$typesWithoutStores = [
CatalogProductTable::TYPE_SET => true,
CatalogProductTable::TYPE_SKU => true,
CatalogProductTable::TYPE_SERVICE => true,
];
$typesWithoutReservation = [
CatalogProductTable::TYPE_SET => true,
CatalogProductTable::TYPE_SKU => true,
CatalogProductTable::TYPE_SERVICE => true,
];
if (empty($select))
{
$select = ['*'];
}
else
{
$select[] = 'ID';
$select[] = 'TYPE';
$select[] = 'AVAILABLE';
$select = array_unique($select);
}
MainTypeCollection::normalizeArrayValuesByInt($list, true);
if (empty($list))
{
return [];
}
$resultList = [];
foreach (array_chunk($list, 500) as $pageIds)
{
$iterator = CatalogModelProduct::getList([
'select' => $select,
'filter' => [
'@ID' => $pageIds,
],
]);
while ($row = $iterator->fetch())
{
$row['ID'] = (int)$row['ID'];
$row['TYPE'] = (int)$row['TYPE'];
$row['QUANTITY'] = (float)$row['QUANTITY'];
$row['QUANTITY_RESERVED'] = (float)$row['QUANTITY_RESERVED'];
$row['CHECK_QUANTITY'] = (
$row['TYPE'] !== CatalogProductTable::TYPE_SERVICE
&& $row['QUANTITY_TRACE'] === CatalogProductTable::STATUS_YES
&& $row['CAN_BUY_ZERO'] === CatalogProductTable::STATUS_NO
);
CatalogProductSystemField::prepareRow($row, CatalogProductSystemField::OPERATION_PROVIDER);
if (isset($typesWithoutStores[$row['TYPE']]))
{
$row['USED_STORE_INVENTORY'] = false;
}
else
{
$row['USED_STORE_INVENTORY'] = $usedStoreInventory;
}
if (isset($typesWithoutReservation[$row['TYPE']]))
{
$row['USED_RESERVATION'] = false;
$row['QUANTITY_RESERVED'] = 0;
}
else
{
$row['USED_RESERVATION'] = true;
}
$resultList[$row['ID']] = $row;
}
unset($row, $iterator);
}
unset($pageIds);
return $resultList;
}