• Модуль: 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;
}