• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/discount/discountmanager.php
  • Класс: BitrixCatalogDiscountDiscountManager
  • Вызов: DiscountManager::getParentProducts
static function getParentProducts(&$productData, $entityData, $iblockData): void
{
	if (empty($iblockData['skuIblockList']))
		return;
	if (empty($productData) || !is_array($productData))
		return;
	$parentMap = [];
	$parentData = [];
	$parentIblockData = [
		'iblockElement' => [],
		'iblockList' => []
	];
	if (!empty($entityData['iblockFields']))
	{
		foreach ($entityData['iblockFields'] as &$value)
			$value = 'PARENT_'.$value;
	}
	if (array_key_exists('catalogFields', $entityData))
		unset($entityData['catalogFields']);
	foreach ($iblockData['skuIblockList'] as $skuData)
	{
		if (empty($iblockData['iblockElement'][$skuData['IBLOCK_ID']]))
			continue;
		foreach ($iblockData['iblockElement'][$skuData['IBLOCK_ID']] as $element)
		{
			if (empty($productData[$element]['PARENT_ID']))
				continue;
			$parentId = (int)(
				is_array($productData[$element]['PARENT_ID'])
				? current($productData[$element]['PARENT_ID'])
				: $productData[$element]['PARENT_ID']
			);
			if ($parentId <= 0)
				continue;
			if (!isset($parentMap[$parentId]))
				$parentMap[$parentId] = [];
			$parentMap[$parentId][] = $element;
			$parentData[$parentId] = [];
			if (!isset($parentIblockData['iblockElement'][$skuData['PRODUCT_IBLOCK_ID']]))
				$parentIblockData['iblockElement'][$skuData['PRODUCT_IBLOCK_ID']] = [];
			$parentIblockData['iblockElement'][$skuData['PRODUCT_IBLOCK_ID']][] = $parentId;
		}
		unset($parentId, $element);
	}
	unset($skuData);
	if (empty($parentIblockData['iblockElement']))
		return;
	$parentIblockData['iblockList'] = array_keys($parentIblockData['iblockElement']);

	self::getProductData($parentData, $entityData, $parentIblockData);

	foreach ($parentData as $parentId => $data)
	{
		$parentSections = [];
		if ($entityData['sections'])
		{
			$parentSections = $data['SECTION_ID'];
			unset($data['SECTION_ID']);
		}
		if(!isset($parentMap[$parentId]))
		{
			continue;
		}
		foreach ($parentMap[$parentId] as $element)
		{
			$productData[$element] = array_merge($productData[$element], $data);
			if ($entityData['sections'])
			{
				$productData[$element]['SECTION_ID'] = (
					empty($productData['SECTION_ID'])
					? $parentSections
					: array_merge($productData[$element]['SECTION_ID'], $parentSections)
				);
			}
		}
		unset($element, $parentSections);
	}
	unset($parentId, $data);
}