- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/discount/discountmanager.php
- Класс: BitrixCatalogDiscountDiscountManager
- Вызов: DiscountManager::fillProperties
static function fillProperties(array &$productData, array $productIds, array $iblockData, array $entityData)
{
$propertyValues = array_fill_keys($productIds, []);
foreach ($entityData['needProperties'] as $iblock => $propertyList)
{
if (empty($iblockData['iblockElement'][$iblock]))
{
continue;
}
$needToLoad = array_fill_keys($iblockData['iblockElement'][$iblock], true);
if(self::$productProperties)
{
foreach ($iblockData['iblockElement'][$iblock] as $productId)
{
$allExist = true;
foreach ($propertyList as $prop)
{
$propData = self::getCachedProductProperty($productId, $prop);
if (!empty($propData))
{
$propertyValues[$productId][$propData['ID']] = $propData;
}
else
{
$allExist = false;
break;
}
}
unset($prop);
if (!$allExist)
{
// if property value is not exist
$propertyValues[$productId] = [];
}
else
{
unset($needToLoad[$productId]);
}
unset($allExist);
}
}
if(!empty($needToLoad))
{
$needProductIds = array_keys($needToLoad);
sort($needProductIds);
$iblockPropertyValues = array_fill_keys($needProductIds, []);
CTimeZone::Disable();
foreach (array_chunk($needProductIds, 500) as $pageIds)
{
$filter = [
'ID' => $pageIds,
'IBLOCK_ID' => $iblock
];
CIBlockElement::GetPropertyValuesArray(
$iblockPropertyValues,
$iblock,
$filter,
['ID' => $propertyList],
[
'USE_PROPERTY_ID' => 'Y',
'PROPERTY_FIELDS' => ['ID', 'PROPERTY_TYPE', 'MULTIPLE', 'USER_TYPE']
]
);
foreach ($iblockPropertyValues as $productId => $data)
{
if (!empty($data))
{
$propertyValues[$productId] = $data;
unset($needToLoad[$productId]);
}
}
unset($productId, $data);
}
unset($pageIds);
CTimeZone::Enable();
unset($iblockPropertyValues, $needProductIds);
if (!empty($needToLoad))
{
self::fillEmptyProperties($propertyValues, $iblock, array_keys($needToLoad), $propertyList);
}
}
}
self::convertProperties($productData, $propertyValues, $entityData, $iblockData);
}