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