Задать вопрос
@pavelmosin

Как вывести информацию в письме о заказе в зависимости от типа доставки?

Добрый день!
Например, если пользователь выбрал способ доставки "Самовывоз" в письме о заказе указать время работы магазина. Или если выбрал "Курьре" - временные рамки, в которые курьер может прибыть
  • Вопрос задан
  • 235 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Можно сделать через обработчик события OnBeforeEventAdd. Оно вызывается в момент добавления почтового события в таблицу b_event.

Можно отловить в обработчике почтовое событие типа SALE_NEW_ORDER. В нём, имея ID заказа, получить всю дополнительную информацию и добавить ее в новое поле в массив $arFields, например $arFields["DELIVERY_INFO"]. И уже в почтовом шаблоне вывести эту информацию по аналогии с другими полями #DELIVERY_INFO#.

В ссылке на документацию есть пример работы с этим событием. Так же я решал другую задачу (добавление ссылки на отслеживание), но принцип тот же будет:
public static function addTrackingUrlToMail(&$event, &$lid, &$arFields)
{
    if ($event == "SALE_ORDER_TRACKING_NUMBER") {
        $order = \Bitrix\Sale\Order::load($arFields["ORDER_REAL_ID"]);
        $shipmentCollection = $order->getShipmentCollection();
        /* @var $shipmentColletion \Bitrix\Sale\ShipmentCollection */


        $deliveryId = 0;
        foreach ($shipmentCollection as $shipment) {
            /* @var $shipment \Bitrix\Sale\Shipment */
            if (!$shipment->isSystem()) {
                $delivery = $shipment->getDelivery();
                $deliveryId = $delivery->getParentId();
                $arFields["DELIVERY_NAME"] = $delivery->getNameWithParent();

            }
        }
        $urlTemplate = "<a href='%s'>%s</a>";
        $trackMessage = "";

        if (\Gricuk\Sale\Delivery\Helper::isRussianPostDelivery($deliveryId)) {
            $trackUrl = "https://www.pochta.ru/tracking#{$arFields["ORDER_TRACKING_NUMBER"]}";
            $trackMessage = sprintf($urlTemplate, $trackUrl, $trackUrl);
        } else {
            switch ($deliveryId) {
                case Conf::ID_DELIVERY_CDEK://ID службы доставки СДЕК
                    $trackUrl = "https://www.cdek.ru/track.html?order_id={$arFields["ORDER_TRACKING_NUMBER"]}";
                    $trackMessage = sprintf($urlTemplate, $trackUrl, $trackUrl);
                    break;
            }
        }

        $arFields["TRACK_URL"] = $trackMessage;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы