• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/component/skutree.php
  • Класс: BitrixCatalogComponentSkuTree
  • Вызов: SkuTree::editTemplateOfferProps
protected function editTemplateOfferProps(array &$product, array $skuPropList, int $selectedOfferId = null): void
{
	$matrix = [];
	$newOffers = [];
	$double = [];
	$product['OFFERS_PROP'] = false;

	$skuPropCodes = array_keys($skuPropList);
	$matrixFields = array_fill_keys($skuPropCodes, false);

	foreach ($product['OFFERS'] as $keyOffer => $offer)
	{
		if (isset($double[$offer['ID']]))
		{
			continue;
		}

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

		$matrix[$keyOffer] = $row;

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

	$product['OFFERS'] = $newOffers;

	$usedFields = [];
	$existingValues = [];
	$sortFields = [];

	foreach ($skuPropCodes as $propCode)
	{
		$boolExist = $matrixFields[$propCode];
		foreach ($matrix as $keyOffer => $row)
		{
			if ($boolExist)
			{
				$offer =& $product['OFFERS'][$keyOffer];
				$rowValue = $matrix[$keyOffer][$propCode]['VALUE'];
				$offer['TREE'][$skuPropList[$propCode]['ID']] = $rowValue;

				if ($selectedOfferId === $offer['ID'])
				{
					$product['SELECTED_VALUES'][$skuPropList[$propCode]['ID']] = $rowValue;
				}

				$offer['SKU_SORT_'.$propCode] = $matrix[$keyOffer][$propCode]['SORT'];
				$sortFields['SKU_SORT_'.$propCode] = SORT_NUMERIC;

				$usedFields[$propCode] = $skuPropList[$propCode];
				$existingValues[$propCode][] = $rowValue;
			}
			else
			{
				unset($matrix[$keyOffer][$propCode]);
			}
		}
	}

	foreach ($existingValues as &$propertyValue)
	{
		$propertyValue = array_unique($propertyValue);
	}

	$product['OFFERS_PROP'] = $usedFields;
	$product['EXISTING_VALUES'] = $existingValues;

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