• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/base.php
  • Класс: BitrixIblockComponentBase
  • Вызов: Base::getProductInfo
protected function getProductInfo($productId)
{
	if (!$this->useCatalog)
		return null;

	$productId = (int)$productId;
	if ($productId <= 0)
		return null;

	$iblockId = (int)CIBlockElement::GetIBlockByID($productId);
	if ($iblockId <= 0)
		return null;

	$iterator = CatalogProductTable::getList([
		'select' => ['ID', 'TYPE'],
		'filter' => ['=ID' => $productId]
	]);
	$row = $iterator->fetch();
	unset($iterator);
	if (empty($row))
		return null;

	$row['ID'] = (int)$row['ID'];
	$row['TYPE'] = (int)$row['TYPE'];
	if (
		$row['TYPE'] == CatalogProductTable::TYPE_EMPTY_SKU
		|| $row['TYPE'] == CatalogProductTable::TYPE_FREE_OFFER
	)
		return null;

	$row['ELEMENT_IBLOCK_ID'] = $iblockId;
	$row['PRODUCT_IBLOCK_ID'] = 0;

	if (isset($this->storage['CATALOGS'][$iblockId]))
	{
		if ($this->storage['CATALOGS'][$iblockId]['CATALOG_TYPE'] == CCatalogSku::TYPE_CATALOG)
			$row['PRODUCT_IBLOCK_ID'] = $this->storage['CATALOGS'][$iblockId]['IBLOCK_ID'];
		else
			$row['PRODUCT_IBLOCK_ID'] = $this->storage['CATALOGS'][$iblockId]['PRODUCT_IBLOCK_ID'];
		return $row;
	}

	$catalog = CCatalogSku::GetInfoByIBlock($iblockId);
	if (empty($catalog) || !is_array($catalog))
		return null;

	if ($catalog['CATALOG_TYPE'] == CCatalogSku::TYPE_PRODUCT)
		return null;

	if ($catalog['CATALOG_TYPE'] == CCatalogSku::TYPE_OFFERS)
	{
		$iblockId = $catalog['PRODUCT_IBLOCK_ID'];
		$catalog = CCatalogSku::GetInfoByIBlock($iblockId);
	}
	if (!isset($this->storage['CATALOGS']))
		$this->storage['CATALOGS'] = [];
	$this->storage['CATALOGS'][$iblockId] = $catalog;
	unset($catalog);

	if ($this->storage['CATALOGS'][$iblockId]['CATALOG_TYPE'] == CCatalogSku::TYPE_CATALOG)
		$row['PRODUCT_IBLOCK_ID'] = $this->storage['CATALOGS'][$iblockId]['IBLOCK_ID'];
	else
		$row['PRODUCT_IBLOCK_ID'] = $this->storage['CATALOGS'][$iblockId]['PRODUCT_IBLOCK_ID'];
	return $row;
}