Ниже представлен код, который получает информацию о категориях товаров и добавляет их в результирующий массив компонента корзины.
В файле result_modifier.php компонента корзины пишем:
$arProducts = [];
foreach ($arResult['GRID']['ROWS'] as $arRow)
{
$arProducts[$arRow['PRODUCT_ID']] = [];
}
if (!empty($arProducts))
{
$arSelect = Array("ID", "IBLOCK_ID", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.IBLOCK_SECTION_ID", "IBLOCK_SECTION_ID");
$arFilter = Array("ID" => array_keys($arProducts));
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
$arSections = array();
while ($arFields = $res->GetNext())
{
if (intval($arFields['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID']) > 0)
{
$arSections[$arFields['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID']] = [];
} else
{
$arSections[$arFields['IBLOCK_SECTION_ID']]=[];
}
$arProducts[$arFields['ID']] = $arFields;
}
if (!empty($arSections))
{
$SectFilter = Array('ID' => array_keys($arSections),"IBLOCK_ID"=>23);
$Sect_list = CIBlockSection::GetList(Array("NAME" => "ASC"), $SectFilter, false,
array('ID','NAME','IBLOCK_ID','IBLOCK_SECTION_ID','SECTION_PAGE_URL'));
while ($Section = $Sect_list->GetNext())
{
$arSections[$Section['ID']] = $Section;
}
foreach ($arProducts as $pid=>$arProduct)
{
$arProducts[$pid]['SECTION'] = $arSections[(
intval($arProduct['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID'])>0
) ? $arProduct['PROPERTY_CML2_LINK_IBLOCK_SECTION_ID'] : $arProduct['IBLOCK_SECTION_ID']];
}
}
foreach ($arResult['GRID']['ROWS'] as $key => $arRow)
{
$arIblockElement = $arProducts[$arRow['PRODUCT_ID']];
$arResult['GRID']['ROWS'][$key]['SECTION'] = $arIblockElement['SECTION'];
}
}
Все, дальше в компоненте можно спокойно пользоваться нужными полями - выводить название раздела (вместе со ссылкой).

