- Модуль: 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);
}