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