• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/element.php
  • Класс: BitrixIblockComponentElement
  • Вызов: Element::editTemplateJsOffers
protected function editTemplateJsOffers(&$item, $offerSet)
{
	$matrix = [];
	$intSelected = -1;

	$offerText = $this->arParams['SHOW_SKU_DESCRIPTION'] === 'Y';

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

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

		$skuProps = false;
		if (!empty($offer['DISPLAY_PROPERTIES']))
		{
			$skuProps = [];
			foreach ($offer['DISPLAY_PROPERTIES'] as $oneProp)
			{
				if ($oneProp['PROPERTY_TYPE'] === IblockPropertyTable::TYPE_FILE)
				{
					continue;
				}

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

		if (isset($offerSet[$offer['ID']]))
		{
			$offer['OFFER_GROUP'] = true;
			$item['OFFERS'][$keyOffer]['OFFER_GROUP'] = true;
		}

		$ratioSelectedIndex = $offer['ITEM_MEASURE_RATIO_SELECTED'];
		$firstPhoto = reset($offer['MORE_PHOTO']);
		$oneRow = [
			'ID' => $offer['ID'],
			'CODE' => $offer['CODE'],
			'NAME' => $offer['~NAME'] ?? $item['~NAME'],
			'TREE' => $offer['TREE'],
			'DISPLAY_PROPERTIES' => $skuProps,
			'PREVIEW_TEXT' => $offerText ? $offer['PREVIEW_TEXT'] : '',
			'PREVIEW_TEXT_TYPE' => $offerText ? $offer['PREVIEW_TEXT_TYPE'] : '',
			'DETAIL_TEXT' => $offerText ? $offer['DETAIL_TEXT'] : '',
			'DETAIL_TEXT_TYPE' => $offerText ? $offer['DETAIL_TEXT_TYPE'] : '',
			'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,
			'PREVIEW_PICTURE' => $firstPhoto,
			'DETAIL_PICTURE' => $firstPhoto,
			'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'],
			'OFFER_GROUP' => (isset($offerSet[$offer['ID']]) && $offerSet[$offer['ID']]),
			'CAN_BUY' => $offer['CAN_BUY'],
			'CATALOG_SUBSCRIBE' => $offer['PRODUCT']['SUBSCRIBE'],
			'SLIDER' => $offer['MORE_PHOTO'],
			'SLIDER_COUNT' => $offer['MORE_PHOTO_COUNT'],
		];
		unset($ratioSelectedIndex);

		$matrix[$keyOffer] = $oneRow;
	}

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

	$item['JS_OFFERS'] = $matrix;
	$item['OFFERS_SELECTED'] = $intSelected;

	if ($matrix[$intSelected]['SLIDER_COUNT'] > 0)
	{
		$item['MORE_PHOTO'] = $matrix[$intSelected]['SLIDER'];
		$item['MORE_PHOTO_COUNT'] = $matrix[$intSelected]['SLIDER_COUNT'];
	}

	$item['OFFERS_IBLOCK'] = $this->storage['SKU_IBLOCK_INFO']['IBLOCK_ID'];
}