• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/elementlist.php
  • Класс: BitrixIblockComponentElementList
  • Вызов: ElementList::getTemplateSkuPropList
public function getTemplateSkuPropList()
{
	$skuPropList = array();

	if ($this->arResult['MODULES']['catalog'] && !empty($this->storage['IBLOCK_PARAMS']))
	{
		$elementIndex = array_keys($this->elements);

		foreach ($this->storage['IBLOCK_PARAMS'] as $iblockId => $iblockParams)
		{
			$skuPropList[$iblockId] = array();
			$sku = CCatalogSku::GetInfoByProductIBlock($iblockId);
			$boolSku = !empty($sku) && is_array($sku);

			if ($boolSku && !empty($iblockParams['OFFERS_TREE_PROPS']) && $this->arParams['PRODUCT_DISPLAY_MODE'] === 'Y')
			{
				$skuPropList[$iblockId] = CIBlockPriceTools::getTreeProperties(
					$sku,
					$iblockParams['OFFERS_TREE_PROPS'],
					array(
						'PICT' => $this->arResult['DEFAULT_PICTURE'],
						'NAME' => '-'
					)
				);

				if (!empty($skuPropList[$iblockId]))
				{
					if (!empty($this->productWithOffers[$iblockId]))
					{
						$skuPropIds = array();
						foreach ($skuPropList[$iblockId] as $property)
						{
							$skuPropIds[$property['CODE']] = array(
								'ID' => $property['ID'],
								'CODE' => $property['CODE'],
								'PROPERTY_TYPE' => $property['PROPERTY_TYPE'],
								'USER_TYPE' => $property['USER_TYPE']
							);
						}
						unset($property);

						$needValues = array();
						foreach ($elementIndex as $index)
						{
							if ($this->elements[$index]['IBLOCK_ID'] != $iblockId)
								continue;
							if ($this->elements[$index]['PRODUCT']['TYPE'] != CatalogProductTable::TYPE_SKU)
								continue;
							if (empty($this->elements[$index]['OFFERS']))
								continue;
							foreach ($this->elements[$index]['OFFERS'] as $offer)
							{
								foreach ($skuPropIds as $property)
								{
									if (isset($offer['DISPLAY_PROPERTIES'][$property['CODE']]))
									{
										if (!isset($needValues[$property['ID']]))
											$needValues[$property['ID']] = array();
										$valueId = ($property['PROPERTY_TYPE'] == IblockPropertyTable::TYPE_LIST
											? $offer['DISPLAY_PROPERTIES'][$property['CODE']]['VALUE_ENUM_ID']
											: $offer['DISPLAY_PROPERTIES'][$property['CODE']]['VALUE']
										);
										$needValues[$property['ID']][$valueId] = $valueId;
										unset($valueId);
									}
								}
								unset($property);
							}
							unset($offer);
						}
						unset($index);

						if (!empty($needValues))
							CIBlockPriceTools::getTreePropertyValues($skuPropList[$iblockId], $needValues);
						unset($needValues);

						unset($skuPropIds);
					}
				}
				else
				{
					$this->arParams['PRODUCT_DISPLAY_MODE'] = 'N';
				}
			}
		}
	}

	return $skuPropList;
}