• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/element.php
  • Класс: BitrixIblockComponentElement
  • Вызов: Element::editTemplateOfferProps
protected function editTemplateOfferProps(&$item)
{
	$matrix = array();
	$newOffers = array();
	$double = array();
	$item['OFFER_GROUP'] = false;
	$item['OFFERS_PROP'] = false;

	$iblockParams = $this->storage['IBLOCK_PARAMS'][$item['IBLOCK_ID']];

	$boolSkuDisplayProps = false;
	$skuPropList = $this->arResult['SKU_PROPS'];
	$skuPropIds = array_keys($skuPropList);
	$matrixFields = array_fill_keys($skuPropIds, false);

	foreach ($item['OFFERS'] as $keyOffer => $offer)
	{
		$offer['ID'] = (int)$offer['ID'];

		if (isset($double[$offer['ID']]))
			continue;

		$offer['OFFER_GROUP'] = false;

		$row = array();
		foreach ($skuPropIds as $code)
		{
			$row[$code] = $this->getTemplatePropCell($code, $offer, $matrixFields, $skuPropList);
		}

		$matrix[$keyOffer] = $row;

		CIBlockPriceTools::setRatioMinPrice($offer, false);
		$this->editTemplateOfferSlider($offer, $item['IBLOCK_ID'], 0, $this->arParams['ADD_DETAIL_TO_SLIDER'] === 'Y', $item['MORE_PHOTO']);

		if (CIBlockPriceTools::clearProperties($offer['DISPLAY_PROPERTIES'], $iblockParams['OFFERS_TREE_PROPS']))
		{
			$boolSkuDisplayProps = true;
		}
		$offer['TREE'] = [];

		$double[$offer['ID']] = true;
		$newOffers[$keyOffer] = $offer;
	}

	$item['OFFERS'] = $newOffers;
	$item['SHOW_OFFERS_PROPS'] = $boolSkuDisplayProps;

	$usedFields = array();
	$sortFields = array();

	foreach ($skuPropIds as $propCode)
	{
		$boolExist = $matrixFields[$propCode];
		foreach ($matrix as $keyOffer => $row)
		{
			if ($boolExist)
			{
				$item['OFFERS'][$keyOffer]['TREE']['PROP_'.$skuPropList[$propCode]['ID']] = $matrix[$keyOffer][$propCode]['VALUE'];
				$item['OFFERS'][$keyOffer]['SKU_SORT_'.$propCode] = $matrix[$keyOffer][$propCode]['SORT'];
				$usedFields[$propCode] = true;
				$sortFields['SKU_SORT_'.$propCode] = SORT_NUMERIC;
			}
			else
			{
				unset($matrix[$keyOffer][$propCode]);
			}
		}
	}

	$item['OFFERS_PROP'] = $usedFields;
	$item['OFFERS_PROP_CODES'] = (!empty($usedFields) ? base64_encode(serialize(array_keys($usedFields))) : '');

	Collection::sortByColumn($item['OFFERS'], $sortFields);
}