При работе с каталогами, с торговыми предложениями, достаточно распространенной задачей является получение информации о родительском товаре для торгового предложения, добавленного в корзину.
Достаточно просто можно получить нужную информацию одним запросом к базе данных. Для этого в result_modifier.php шаблона компонента корзины пишем следующий код:
$arProductIDs = array_flip(array_map(function ($item) { return $item['PRODUCT_ID']; }, $arResult['GRID']['ROWS'])); $arFilter = array('ID' => array_keys($arProductIDs)); $arSelectFields = array("ID", "IBLOCK_ID", "DETAIL_PAGE_URL", "NAME", "PROPERTY_CML2_LINK", "PROPERTY_CML2_LINK.DETAIL_PAGE_URL", "PROPERTY_CML2_LINK.NAME"); $rsElements = CIBlockElement::GetList($arOrder, $arFilter, FALSE, FALSE, $arSelectFields); while ($arElement = $rsElements->GetNext()) { if(intval($arElement['PROPERTY_CML2_LINK_VALUE'])>0){ $arProduct = [ 'NAME'=>$arElement['PROPERTY_CML2_LINK_NAME'], 'DETAIL_PAGE_URL'=>$arElement['PROPERTY_CML2_LINK_DETAIL_PAGE_URL'], ]; } else { $arProduct = [ 'NAME'=>$arElement['NAME'], 'DETAIL_PAGE_URL'=>$arElement['DETAIL_PAGE_URL'], ]; } $arProductIDs[$arElement['ID']] = $arProduct; } foreach ($arResult['GRID']['ROWS'] as $k=>$arRow){ $arResult['GRID']['ROWS'][$k]['PRODUCT_DATA'] = $arProductIDs[$arRow['PRODUCT_ID']]; if(!empty($arResult['GRID']['ROWS'][$k]['PRODUCT_DATA']) && strlen($arResult['GRID']['ROWS'][$k]['~DETAIL_PAGE_URL'])<=0){ $arResult['GRID']['ROWS'][$k]['DETAIL_PAGE_URL'] = $arResult['GRID']['ROWS'][$k]['PRODUCT_DATA']['DETAIL_PAGE_URL']; $arResult['GRID']['ROWS'][$k]['~DETAIL_PAGE_URL'] = $arResult['GRID']['ROWS'][$k]['PRODUCT_DATA']['DETAIL_PAGE_URL']; } }
Таким образом мы обновим массив $arResult['GRID']['ROWS'], содержащий информацию об элементах корзины.
Для начала мы получили из всех элементов корзины идентификаторы товаров, а затем, имея эти ID получили ID родительских товаров и, заодно, информацию о родительских товарах.
Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.
P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом