• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/basketcomponenthelper.php
  • Класс: BitrixSaleBasketComponentHelper
  • Вызов: BasketComponentHelper::getRatio
static function getRatio(Basket $basket, BasketItem $item = null)
{
	$result = new Result();
	$ratioList = array();
	if (MainLoader::includeModule('catalog'))
	{
		$map = array();
		$elementList = array();

		/** @var BasketItem $basketItem */
		foreach ($basket as $basketItem)
		{
			$code = $basketItem->getBasketCode();
			if ($item !== null && $item->getBasketCode() != $code)
			{
				continue;
			}

			$hash = md5((strval($basketItem->getField("PRODUCT_PROVIDER_CLASS")) != '' ? $basketItem->getField("PRODUCT_PROVIDER_CLASS"): "")."|".(strval($basketItem->getField("MODULE")) != '' ? $basketItem->getField("MODULE"): "")."|".$basketItem->getField("PRODUCT_ID"));

			if (array_key_exists($hash, static::$cacheRatio))
			{
				$ratioList[$code] = static::$cacheRatio[$hash];
			}
			else
			{
				$elementList[$basketItem->getField("PRODUCT_ID")] = $basketItem->getField("PRODUCT_ID");
			}

			if (!isset($map[$basketItem->getField("PRODUCT_ID")]))
			{
				$map[$basketItem->getField("PRODUCT_ID")] = array();
			}

			$map[$basketItem->getField("PRODUCT_ID")][] = $code;
		}

		if (!empty($elementList))
		{
			$res = CatalogMeasureRatioTable::getList(array(
				'select' => array('*'),
				'filter' => array('@PRODUCT_ID' => $elementList, '=IS_DEFAULT' => 'Y')
			));
			while ($ratioData = $res->fetch())
			{
				if (empty($map[$ratioData["PRODUCT_ID"]]))
					continue;

				foreach ($map[$ratioData["PRODUCT_ID"]] as $key)
				{
					$ratioList[$key] = $ratioData["RATIO"];

					if (!$basketItem = $basket->getItemByBasketCode($key))
						continue;

					$hash = md5((strval($basketItem->getField("PRODUCT_PROVIDER_CLASS")) != '' ? $basketItem->getField("PRODUCT_PROVIDER_CLASS"): "")."|".(strval($basketItem->getField("MODULE")) != '' ? $basketItem->getField("MODULE"): "")."|".$basketItem->getField("PRODUCT_ID"));

					static::$cacheRatio[$hash] = $ratioData["RATIO"];
					static::$cacheRatioData[$hash] = $ratioData;
				}
				unset($key);
			}
			unset($ratioData, $dbRatio);
		}
		unset($elementList, $map);
	}

	if (!empty($ratioList))
		$result->addData(array('RATIO_LIST' => $ratioList));

	return $result;
}