• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/controller/skutree.php
  • Класс: BitrixCatalogControllerSkuTree
  • Вызов: SkuTree::getSkuAction
public function getSkuAction(int $skuId): array
{
	$iterator = CIBlockElement::GetList(
		[],
		[
			'ID' => $skuId,
			'ACTIVE' => 'Y',
			'ACTIVE_DATE' => 'Y',
			'CHECK_PERMISSIONS' => 'Y',
			'MIN_PERMISSION' => 'R',
		],
		false,
		false,
		['ID', 'IBLOCK_ID']
	);
	$element = $iterator->Fetch();
	if (!$element)
	{
		return [];
	}
	unset($iterator);

	$skuRepository = ServiceContainer::getSkuRepository($element['IBLOCK_ID']);
	if (!$skuRepository)
	{
		return [];
	}

	/** @var BaseSku $sku */
	$sku = $skuRepository->getEntityById($skuId);

	if (!$sku || $sku->isSimple())
	{
		return [];
	}

	$parentProduct = $sku->getParent();
	if (!$parentProduct)
	{
		return [];
	}

	/** @var BitrixCatalogComponentSkuTree $skuTree */
	$skuTree = ServiceContainer::make('sku.tree', [
		'iblockId' => $parentProduct->getIblockId(),
	]);

	if (!$skuTree)
	{
		return [];
	}

	$productId = $parentProduct->getId();

	$offers = $skuTree->loadWithSelectedOffers([
		$productId => $skuId,
	]);

	if ($offers[$productId][$skuId] && is_array($offers[$productId][$skuId]['OFFERS']))
	{
		foreach ($offers[$productId][$skuId]['OFFERS'] as $offer)
		{
			if ((int)$offer['ID'] === $skuId)
			{
				unset($offer['DISPLAY_PROPERTIES'], $offer['PROPERTIES']);
				return $offer;
			}
		}
	}

	return [];
}