Найти родительский товар по ID торгового предложения
Получение ID родительского товара через CCatalogSku::GetProductInfo с проверкой подключения модуля catalog и обработкой результата.
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Получение ID родительского товара по торговому предложению (SKU) через классический API Bitrix. Используйте в компонентах каталога, корзины, детальных страницах товаров для работы с базовым товаром.
use Bitrix\Main\Loader;
/**
* Получить ID родительского товара по SKU
* @param int $skuId ID торгового предложения
* @return array|false ['PRODUCT_ID' => int, 'IBLOCK_ID' => int] или false
*/
function getParentProductBySku($skuId) {
if (!Loader::includeModule('catalog')) {
return false;
}
// Проверяем, является ли элемент SKU
$arSku = CCatalogSku::GetProductInfo($skuId);
if ($arSku && isset($arSku['ID'])) {
return [
'PRODUCT_ID' => (int)$arSku['ID'],
'IBLOCK_ID' => (int)$arSku['IBLOCK_ID']
];
}
return false;
}
/**
* Получить полную информацию о родительском товаре
* @param int $skuId ID торгового предложения
* @return array|false Массив с данными товара или false
*/
function getParentProductFullInfo($skuId) {
if (!Loader::includeModule('catalog') || !Loader::includeModule('iblock')) {
return false;
}
$productInfo = getParentProductBySku($skuId);
if (!$productInfo) {
return false;
}
// Получаем элемент инфоблока
$res = CIBlockElement::GetByID($productInfo['PRODUCT_ID']);
if ($element = $res->GetNextElement()) {
$fields = $element->GetFields();
$properties = $element->GetProperties();
return [
'FIELDS' => $fields,
'PROPERTIES' => $properties,
'IBLOCK_ID' => $productInfo['IBLOCK_ID']
];
}
return false;
}
Usage:
// В component.php или обработчике
$skuId = 12345;
$parentInfo = getParentProductBySku($skuId);
if ($parentInfo) {
echo 'Родительский товар ID: ' . $parentInfo['PRODUCT_ID'];
echo 'Инфоблок ID: ' . $parentInfo['IBLOCK_ID'];
}
// Получить полную информацию
$fullInfo = getParentProductFullInfo($skuId);
if ($fullInfo) {
echo $fullInfo['FIELDS']['NAME'];
}
Notes:
⚠️ CCatalogSku::GetProductInfo() возвращает информацию только если переданный ID действительно является торговым предложением. Для обычного товара вернётся false. Модуль catalog должен быть подключен. В новых версиях Bitrix можно использовать D7 API через \Bitrix\Catalog\ProductTable.