- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/product.php
- Класс: BitrixCatalogProductTable
- Вызов: ProductTable::getCurrentRatioWithMeasure
static function getCurrentRatioWithMeasure($product)
{
if (!is_array($product))
$product = array($product);
MainTypeCollection::normalizeArrayValuesByInt($product, true);
if (empty($product))
return false;
$result = array();
$defaultMeasure = CCatalogMeasure::getDefaultMeasure(true, true);
$defaultRow = array(
'RATIO' => 1,
'MEASURE' => (!empty($defaultMeasure) ? $defaultMeasure : array())
);
$existProduct = array();
$measureMap = array();
$productRows = array_chunk($product, 500);
foreach ($productRows as &$row)
{
$productIterator = self::getList(array(
'select' => array('ID', 'MEASURE'),
'filter' => array('@ID' => $row),
'order' => array('ID' => 'ASC')
));
while ($item = $productIterator->fetch())
{
$item['ID'] = (int)$item['ID'];
$item['MEASURE'] = (int)$item['MEASURE'];
$existProduct[] = $item['ID'];
$result[$item['ID']] = $defaultRow;
if ($item['MEASURE'] > 0)
{
if (!isset($measureMap[$item['MEASURE']]))
$measureMap[$item['MEASURE']] = array();
$measureMap[$item['MEASURE']][] = &$result[$item['ID']];
}
}
unset($item, $productIterator);
}
unset($row, $productRows);
unset($defaultRow, $defaultMeasure);
if (empty($existProduct))
return false;
$ratioResult = MeasureRatioTable::getCurrentRatio($existProduct);
if (!empty($ratioResult))
{
foreach ($ratioResult as $ratioProduct => $ratio)
$result[$ratioProduct]['RATIO'] = $ratio;
unset($ratio, $ratioProduct);
}
unset($ratioResult);
unset($existProduct);
if (!empty($measureMap))
{
$measureIterator = CCatalogMeasure::getList(
array(),
array('@ID' => array_keys($measureMap)),
false,
false,
array()
);
while ($measure = $measureIterator->getNext())
{
$measure['ID'] = (int)$measure['ID'];
if (empty($measureMap[$measure['ID']]))
continue;
foreach ($measureMap[$measure['ID']] as &$product)
$product['MEASURE'] = $measure;
unset($product);
}
unset($measure, $measureIterator);
}
unset($measureMap);
return $result;
}