Изменить наименование товара в компоненте "Оформление заказа"

Предположим, что нам надо изменить наименование товара в компоненте "Оформление заказа" (bitrix:sale.order.ajax) в блоке "Товары в заказе" и вывести вместо названия Торгового предложения название непосредственно товара.

Для этого в файле init.php обрабатываем событие OnSaleComponentOrderJsData, так как все поля формируются скриптом, с помощью которого можно кастомизировать выводимые данные:


\Bitrix\Main\EventManager::getInstance()->addEventHandlerCompatible(
'sale',
'OnSaleComponentOrderJsData',
'SaleOrderEvents::renameItemName'
);
class SaleOrderEvents
{
function renameItemName(&$arResult, &$arParams)
{
$tmp = $arResult['JS_DATA']['GRID']['ROWS'];
foreach($tmp as $key => $item)
{
$mxResult = CCatalogSku::GetProductInfo($item["data"]["PRODUCT_ID"]);
if (is_array($mxResult))
{
$arSelect = Array("ID", "NAME","PROPERTY_ARTIKUL_IM");
$arFilter = Array("ID"=>$mxResult['ID'] , "IBLOCK_ID"=>$mxResult["IBLOCK_ID"], "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
$arResult['JS_DATA']['GRID']['ROWS'][$key]["data"]["NAME"] = $arFields["NAME"];
}
}
}
}
}


В массив $tmp получаем все товары в корзине, затем в цикле для каждого из них по PRODUCT_ID получаем ID основного товара (CCatalogSku::GetProductInfo). Далее с помощь CIBlockElement::GetList формируем массив элемента по полученному ранее ID. И на основе этой информации устанавливаем новые значения $arResult['JS_DATA']['GRID']['ROWS'][$key]["data"]["NAME"] для списка товаров из поля $arFields["NAME"].

bitrixone © 2024