← К заметкам

Заметки

Почему CCatalogProduct::GetByID не возвращает название товара

У CCatalogProduct::GetByID в результате нет названия и раздела товара. Метод читает параметры товара как записи торгового каталога. Название относится к элементу инфоблока.

Для поддержки кода на старом API получить название можно отдельно. Пример выполняется в PHP-консоли коробки, 123 — ID нужного элемента каталога:

use Bitrix\Main\Loader;

if (!Loader::includeModule('iblock')) {
	throw new RuntimeException('Модуль инфоблоков недоступен');
}

$i_product_id = 123;
$ar_element = CIBlockElement::GetByID($i_product_id)->Fetch();
if ($ar_element) {
	echo htmlspecialchars((string) $ar_element['NAME'], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}

Если ID относится к торговому предложению, это будет название предложения. Данные родительского товара требуют отдельного определения связи SKU; подстановка другого числового ID наугад её не заменяет.

Сам CCatalogProduct::GetByID отмечен в документации как устаревший с 17.6.2. Это объяснение legacy-кода, а не рекомендация строить на нём новый импорт. В D7 разделение между товарными параметрами и элементом инфоблока тоже нужно учитывать.

Товар, предложение и цена — ещё три связанные, но отдельные записи.

Документация: CCatalogProduct и устаревшие методы; CIBlockElement::GetByID.