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