Как внести информацию о дополнительных услугах отгрузки в почтовый шаблон заказа в Битрикс?

Как я могу добавлять дополнительные услуги в функции "sale_new_order"?
  • 17 ноября 2023 г. 9:10
Ответы на вопрос 2
Чтобы внести информацию о дополнительных услугах отгрузки в почтовый шаблон заказа в Битрикс, вам потребуется отредактировать файлы шаблонов.

1. Откройте файл шаблона почтового события заказа. Обычно он располагается в папке `bitrix/templates/ваш_шаблон/components/bitrix/sale.order.ajax/mail/`.

2. В файле шаблона найдите код, который выводит информацию о товарах. Обычно он выглядит так:
   ```php
   <? if (!empty($arResult["PRODUCTS"])): ?>
       <? foreach ($arResult["PRODUCTS"] as $product): ?>
           <tr>
               <td><?= $product["NAME"] ?></td>
               <td><?= $product["QUANTITY"] ?></td>
               ...
           </tr>
       <? endforeach; ?>
   <? endif; ?>
   ```

3. После этого вставьте следующий код для вывода информации о дополнительных услугах отгрузки:
   ```php
   <? if (!empty($arResult["SHIPMENT_EXTRA_SERVICES"])): ?>
       <tr>
           <td colspan="3"><b><?= GetMessage("SALE_ORDER_SHIPMENT_EXTRA_SERVICES") ?></b></td>
       </tr>
       <? foreach ($arResult["SHIPMENT_EXTRA_SERVICES"] as $service): ?>
           <tr>
               <td><?= $service["NAME"] ?></td>
               <td><?= $service["VALUE"] ?></td>
               ...
           </tr>
       <? endforeach; ?>
   <? endif; ?>
   ```

4. Сохраните изменения и проверьте работу почтового шаблона заказа. Теперь информация о дополнительных услугах отгрузки должна быть выводиться в письме.

Что касается добавления дополнительных услуг в функции `sale_new_order` в Битрикс, предлагаю использовать следующий код:

```php
AddEventHandler("sale", "OnOrderSave", "CustomizeOrder");

function CustomizeOrder(&$order)
{
    $shipmentCollection = $order->getShipmentCollection();
    foreach ($shipmentCollection as $shipment) {
        $shipmentExtraServices = $shipment->getExtraServices();
        foreach ($shipmentExtraServices as $service) {
            // Добавьте свою логику по работе с дополнительными услугами
        }
    }
}
```

Данный код позволяет получить коллекцию отгрузок заказа и перебрать дополнительные услуги каждой отгрузки для их последующей обработки. Внутри второго цикла вы можете добавить свою логику работы с дополнительными услугами, например, сохранить их значения или выполнить какие-то дополнительные действия.
Для получения дополнительных услуг, доступных через API, можно использовать следующий код:
```php
$order = \Bitrix\Sale\Order::load(1);
/** @var \Bitrix\Sale\Shipment $shipment */
$shipment = $order->getShipmentCollection()->getItemByIndex(0);
$extraServices = $shipment->getExtraServices();
```

Чтобы отобразить дополнительные услуги в кастомном компоненте, можно скопировать компонент `bitrix:sale.personal.order.detail.mail` в свое пространство имен и настроить его для отображения дополнительных услуг.

Если требуется обрабатывать событие `sale_new_order` и добавлять дополнительные поля в шаблон, можно использовать обработчик события `onBeforeEventAdd`. Внутри этого обработчика можно использовать API для формирования нового поля `SHIPMENT_EXTRA_SERVICES`, которое будет выводиться в шаблоне.
Похожие вопросы