• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/product/catalogprovider.php
  • Класс: BitrixCatalogProductCatalogProvider
  • Вызов: CatalogProvider::checkParentActivity
static function checkParentActivity(array $productIds, int $iblockId = 0): array
	{
		$resultList = array();

		$productIdsToLoad = array();

		foreach ($productIds as $productId)
		{
			$cacheKey = $productId.'|'.$iblockId;

			if (static::isExistsHitCache(self::CACHE_PARENT_PRODUCT_ACTIVE, $cacheKey))
			{
				if (static::getHitCache(self::CACHE_PARENT_PRODUCT_ACTIVE, $cacheKey) === 'Y')
				{
					$resultList[] = $productId;
				}
			}
			else
			{
				$productIdsToLoad[] = $productId;
			}
		}

		if (!empty($productIdsToLoad))
		{
			$productToOfferMap = array();
			$parentIds = array();

			$cacheResult = array_fill_keys($productIdsToLoad, 'N');

			$productList = CCatalogSku::getProductList($productIdsToLoad);
			if (!empty($productList))
			{
				foreach ($productList as $offerId => $productInfo)
				{
					$productToOfferMap[$productInfo['ID']][] = $offerId;
					$parentIds[] = $productInfo['ID'];
				}

				$itemList = CIBlockElement::GetList(
					array(),
					array(
						'ID' => array_unique($parentIds),
						'IBLOCK_ID' => $iblockId,
						'ACTIVE' => 'Y',
						'ACTIVE_DATE' => 'Y',
						'CHECK_PERMISSIONS' => 'N'
					),
					false,
					false,
					array('ID')
				);
				while ($item = $itemList->Fetch())
				{
					if (!empty($productToOfferMap[$item['ID']]))
					{
						foreach ($productToOfferMap[$item['ID']] as $productId)
						{
							$cacheResult[$productId] = 'Y';
							$resultList[] = $productId;
						}
					}
				}
			}

			foreach ($cacheResult as $productId => $value)
			{
				static::setHitCache(self::CACHE_PARENT_PRODUCT_ACTIVE, $productId.'|'.$iblockId, $value);
			}
		}

		return $resultList;
	}