• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/component/productlist.php
  • Класс: BitrixCatalogComponentProductList
  • Вызов: ProductList::loadCatalog
protected function loadCatalog(array $skuIds): array
{
	MainTypeCollection::normalizeArrayValuesByInt($skuIds, true);

	$repositoryFacade = ServiceContainer::getRepositoryFacade();
	if (!$repositoryFacade)
	{
		return [];
	}

	$productInfo = [];
	$productSkuIblockMap = [];
	foreach ($skuIds as $skuId)
	{
		$sku = $repositoryFacade->loadVariation($skuId);
		if (!$sku)
		{
			continue;
		}

		/** @var BitrixCatalogv2ProductBaseProduct $product */
		$product = $sku->getParent();

		$fields = $sku->getFields();
		$fields['PRODUCT_ID'] = $product->getId();
		$fields['SKU_ID'] = $skuId;
		$fields['OFFERS_IBLOCK_ID'] = 0;
		$fields['SKU_TREE'] = [];
		$fields['DETAIL_URL'] = $this->getElementDetailUrl($product->getIblockId(), $product->getId());
		$fields['TYPE'] = (int)$fields['TYPE'];

		$measure = $this->measures[$sku->getField('MEASURE')] ?? null;
		if (!$measure)
		{
			$measure = $this->getDefaultMeasure();
		}

		$fields['MEASURE_CODE'] = $measure['CODE'];
		$fields['MEASURE_NAME'] = $measure['SYMBOL'];

		if (!$product->isSimple())
		{
			$fields['OFFERS_IBLOCK_ID'] = $fields['IBLOCK_ID'];
			$fields['IBLOCK_ID'] = $product->getIblockId();
			$productSkuIblockMap[$product->getIblockId()] = $productSkuIblockMap[$product->getIblockId()] ?? [];
			$productSkuIblockMap[$product->getIblockId()][$product->getId()][] = $sku->getId();
		}

		$productInfo[$skuId] = [
			'SKU' => $sku,
			'FIELDS' => $fields,
		];
	}

	if ($productSkuIblockMap)
	{
		foreach ($productSkuIblockMap as $iblockId => $productMap)
		{
			$skuTree = ServiceContainer::make('sku.tree', ['iblockId' => $iblockId]);
			if ($skuTree)
			{
				$skuTreeItems = $skuTree->loadJsonOffers($productMap);
				foreach ($skuTreeItems as $offers)
				{
					foreach ($offers as $skuId => $skuTreeItem)
					{
						if (isset($productInfo[$skuId]['FIELDS']))
						{
							$productInfo[$skuId]['FIELDS']['SKU_TREE'] = $skuTreeItem;
						}
					}
				}
			}
		}
	}

	return $productInfo;
}