Достаточно краткая заметка, в рамках которой рассматривается вариант решения задачи по выводу содержимого корзины и свойств заказа (на примере поля email) на странице подтверждения заказа в Битриксе, то есть в confirm.php
Для чего может потребоваться этот функционал?
Как минимум, для ряда интеграций. Например, это могут быть скрипты CPA-сетей, агрегаторы ремаркетинга или сервисов персонализации. Не во всех, но во многих приходится добавлять содержимое заказа в скрипт на странице подтверждения заказа. Собственно, в рамках данной заметки и предложен вариант решения данной задачи.
Итак, с чего начать?
Для начала идем в папку активного шаблона, components, bitrix, sale.order.ajax, папка шаблона компонента, confirm.php. В этом файле будет проходить вся работа.
Все скрипты лучше всего добавлять в конец данного файла, это позволит избежать некоторых неожиданных событий.
Вызов содержимого корзины происходит следующим образом:
<? $rsCart = CSaleBasket::GetList(Array(),Array("ORDER_ID"=>$arResult['ORDER']['ID']));?> <? while ($arCartItem = $rsCart->Fetch()) {?> { id: "<?=$arCartItem["PRODUCT_ID"]?>", price: "<?=$arCartItem["PRICE"]*$arCartItem['QUANTITY']?>", quantity: "<?=$arCartItem['QUANTITY']?>" }, <?};?>
Строка с CSaleBasket::GetList, собственно, и вызывает содержимое корзины, принимая в качестве аргумента ID текущего заказа. И, соответственно, в цикле While переменные содержимого корзины записываются непосредственно в скрипт. В данном случае, это ID, Количество и цена. С корзиной закончили. Не так уж и сложно, верно?
Теперь мы можем перейти к вызову свойства заказа на примере EMAIL
Существует, видимо, несколько подходов, но автор данной заметки остановился на следующем:
<? if($orderId = $arResult['ORDER']['ID']) { $userEmail = ""; if($order = \Bitrix\Sale\Order::load($orderId)) { /** @var \Bitrix\Sale\PropertyValueCollection $propertyCollection */ if($propertyCollection = $order->getPropertyCollection()) { /** @var \Bitrix\Sale\PropertyValue $orderProperty */ foreach($propertyCollection as $orderProperty) { //Ищет свойство заказа, у которого символьный код EMAIL if($orderProperty->getField('CODE') == 'EMAIL') { $userEmail = $orderProperty->getValue(); } } } } } ?>
В данном случае, несмотря на некоторую громоздкость кода, всё должно быть достаточно очевидно. Подгружаем свойства заказа (методом, где ИД заказа принят в качестве аргумента). Далее делаем проверку по символьному коду свойства заказа, в данном случае это свойство EMAIL. Если оно есть, то записываем его в переменную $userEmail. Далее её можно будет вызвать в нужном месте с помощью <?=$userEmail?>.
В общем и целом, на этом заметку можно закончить, так как цель, поставленная перед данной публикацией достигнута.