- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/product/sku.php
- Класс: BitrixCatalogProductSku
- Вызов: Sku::loadProductPrices
static function loadProductPrices()
{
if (empty(self::$calculatePriceTypes) || empty(self::$offersIds))
return;
sort(self::$offersIds);
foreach (array_chunk(self::$offersIds, 500) as $pageOfferIds)
{
$filter = MainEntityQuery::filter();
$filter->whereIn('PRODUCT_ID', $pageOfferIds);
$filter->whereIn('CATALOG_GROUP_ID', self::$calculatePriceTypes);
$filter->where(MainEntityQuery::filter()->logic('or')->where('QUANTITY_FROM', '<=', 1)->whereNull('QUANTITY_FROM'));
$filter->where(MainEntityQuery::filter()->logic('or')->where('QUANTITY_TO', '>=', 1)->whereNull('QUANTITY_TO'));
$iterator = CatalogPriceTable::getList(array(
'select' => array(
'PRODUCT_ID', 'CATALOG_GROUP_ID', 'PRICE', 'CURRENCY',
'PRICE_SCALE', 'TMP_ID' //TODO: add MEASURE_RATIO_ID
),
'filter' => $filter,
'order' => array('PRODUCT_ID' => 'ASC', 'CATALOG_GROUP_ID' => 'ASC')
));
while ($row = $iterator->fetch())
{
/*
if ($row['MEASURE_RATIO_ID'] !== null)
continue;
unset($row['MEASURE_RATIO_ID']);
*/
$typeId = (int)$row['CATALOG_GROUP_ID'];
$offerId = (int)$row['PRODUCT_ID'];
$productId = self::$offersMap[$offerId];
if (!isset(self::$deferredSku[$productId][self::ACTION_PRICE][$typeId]))
continue;
unset($row['PRODUCT_ID']);
if (!isset(self::$skuPrices[$productId][$typeId]))
self::$skuPrices[$productId][$typeId] = $row;
elseif (self::$skuPrices[$productId][$typeId]['PRICE_SCALE'] > $row['PRICE_SCALE'])
self::$skuPrices[$productId][$typeId] = $row;
}
unset($row, $iterator);
unset($filter);
}
}