Битрикс: Вывод свойств заказа и содержимого корзины в confirm.php

Достаточно краткая заметка, в рамках которой рассматривается вариант решения задачи по выводу содержимого корзины и свойств заказа (на примере поля 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?>.

В общем и целом, на этом заметку можно закончить, так как цель, поставленная перед данной публикацией достигнута.