• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/elementlist.php
  • Класс: BitrixIblockComponentElementList
  • Вызов: ElementList::editTemplateJsOffers
protected function editTemplateJsOffers(&$item)
{
	$matrix = array();
	$boolSkuDisplayProperties = false;
	$intSelected = -1;

	foreach ($item['OFFERS'] as $offerKey => $offer)
	{
		if ($item['OFFER_ID_SELECTED'] > 0)
		{
			$foundOffer = ($item['OFFER_ID_SELECTED'] == $offer['ID']);
		}
		else
		{
			$foundOffer = $offer['CAN_BUY'];
		}

		if ($foundOffer && $intSelected == -1)
		{
			$intSelected = $offerKey;
		}

		unset($foundOffer);

		$skuProps = false;
		if (!empty($offer['DISPLAY_PROPERTIES']))
		{
			$boolSkuDisplayProperties = true;
			$skuProps = array();
			foreach ($offer['DISPLAY_PROPERTIES'] as $oneProp)
			{
				if ($oneProp['PROPERTY_TYPE'] === 'F')
					continue;

				$skuProps[] = array(
					'CODE' => $oneProp['CODE'],
					'NAME' => $oneProp['NAME'],
					'VALUE' => $oneProp['DISPLAY_VALUE']
				);
			}
			unset($oneProp);
		}

		$ratioSelectedIndex = $offer['ITEM_MEASURE_RATIO_SELECTED'];
		$oneRow = array(
			'ID' => $offer['ID'],
			'NAME' => ($offer['~NAME'] ?? ''),
			'TREE' => $offer['TREE'],
			'DISPLAY_PROPERTIES' => $skuProps,

			// compatible prices
			'PRICE' => ($offer['RATIO_PRICE'] ?? $offer['MIN_PRICE'] ?? 0),
			'BASIS_PRICE' => ($offer['MIN_PRICE'] ?? 0),

			// new prices
			'ITEM_PRICE_MODE' => $offer['ITEM_PRICE_MODE'],
			'ITEM_PRICES' => $offer['ITEM_PRICES'],
			'ITEM_PRICE_SELECTED' => $offer['ITEM_PRICE_SELECTED'],
			'ITEM_QUANTITY_RANGES' => $offer['ITEM_QUANTITY_RANGES'],
			'ITEM_QUANTITY_RANGE_SELECTED' => $offer['ITEM_QUANTITY_RANGE_SELECTED'],
			'ITEM_MEASURE_RATIOS' => $offer['ITEM_MEASURE_RATIOS'],
			'ITEM_MEASURE_RATIO_SELECTED' => $ratioSelectedIndex,
			'SECOND_PICT' => $offer['SECOND_PICT'],
			'OWNER_PICT' => $offer['OWNER_PICT'],
			'PREVIEW_PICTURE' => $offer['PREVIEW_PICTURE'],
			'PREVIEW_PICTURE_SECOND' => $offer['PREVIEW_PICTURE_SECOND'],
			'CHECK_QUANTITY' => $offer['CHECK_QUANTITY'],
			'MAX_QUANTITY' => $offer['PRODUCT']['QUANTITY'],
			'STEP_QUANTITY' => $offer['ITEM_MEASURE_RATIOS'][$ratioSelectedIndex]['RATIO'], // deprecated
			'QUANTITY_FLOAT' => is_float($offer['ITEM_MEASURE_RATIOS'][$ratioSelectedIndex]['RATIO']), //deprecated
			'MEASURE' => $offer['ITEM_MEASURE']['TITLE'],
			'CAN_BUY' => $offer['CAN_BUY'],
			'CATALOG_SUBSCRIBE' => $offer['PRODUCT']['SUBSCRIBE']
		);
		unset($ratioSelectedIndex);

		if (isset($offer['MORE_PHOTO_COUNT']) && $offer['MORE_PHOTO_COUNT'] > 0)
		{
			$oneRow['MORE_PHOTO'] = $offer['MORE_PHOTO'];
			$oneRow['MORE_PHOTO_COUNT'] = $offer['MORE_PHOTO_COUNT'];
		}

		$matrix[$offerKey] = $oneRow;
	}

	if ($intSelected == -1)
	{
		$intSelected = 0;
	}

	if (!$matrix[$intSelected]['OWNER_PICT'])
	{
		$item['PREVIEW_PICTURE'] = $matrix[$intSelected]['PREVIEW_PICTURE'];
		$item['PREVIEW_PICTURE_SECOND'] = $matrix[$intSelected]['PREVIEW_PICTURE_SECOND'];
	}

	$item['JS_OFFERS'] = $matrix;
	$item['OFFERS_SELECTED'] = $intSelected;
	$item['OFFERS_PROPS_DISPLAY'] = $boolSkuDisplayProperties;
}