• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock.php
  • Класс: CAllIBlock
  • Вызов: CAllIBlock::getProductUrlValue
static function getProductUrlValue(array $element, bool $serverName): string
{
	$result = '';

	$id = (int)($element['ID'] ?? 0);
	$iblockId = (int)($element['IBLOCK_ID'] ?? 0);

	if ($iblockId <= 0 || $id <= 0)
	{
		return $result;
	}

	if (self::$catalogIncluded === null)
	{
		self::$catalogIncluded = Loader::includeModule('catalog');
	}
	if (!self::$catalogIncluded)
	{
		return $result;
	}

	$iblock = static::getProductIblockData($iblockId);
	if ($iblock === null)
	{
		return $result;
	}

	$parentId = (int)($element['PROPERTY_' . $iblock['SKU_PROPERTY_ID'] . '_VALUE'] ?? self::getProductId($id, $iblockId));
	if ($parentId <= 0)
	{
		return $result;
	}

	$parent = self::getUrlElementData($parentId);
	if ($parent === null)
	{
		return $result;
	}

	return CIBlock::ReplaceDetailUrl(
		$iblock['PRODUCT_IBLOCK']['DETAIL_PAGE_URL'],
		[
			'LANG_DIR' => (string)($element['LANG_DIR'] ?? ''),
			'ID' => $parent['ID'],
			'ELEMENT_ID' => $parent['ID'],
			'CODE' => $parent['CODE'],
			'ELEMENT_CODE' => $parent['CODE'],
			'EXTERNAL_ID' => $parent['XML_ID'],
			'IBLOCK_TYPE_ID' => $iblock['PRODUCT_IBLOCK']['IBLOCK_TYPE_ID'],
			'IBLOCK_ID' => $parent['IBLOCK_ID'],
			'IBLOCK_CODE' => $iblock['PRODUCT_IBLOCK']['CODE'],
			'IBLOCK_EXTERNAL_ID' => $iblock['PRODUCT_IBLOCK']['XML_ID'],
			'IBLOCK_SECTION_ID' => $parent['IBLOCK_SECTION_ID'],
			'SECTION_CODE' => $parent['IBLOCK_SECTION_CODE'],
		],
		$serverName,
		'E'
	);
}