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