Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый заказ"

Просмотров: 39796

Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битрикс "Новый заказ", у вас это не получится, так как переменная ORDER_LIST формируется в модуле sale.order.ajax. Само собой, можно пойти по пути наименьшего сопротивления, изменить компонент заказа. Но есть способ проще и гибче.

Итак: В почтовом событии "Новый заказ", нам доступен ряд переменных. Одной из которых является #ORDER_LIST#

В этой переменной отдается состав заказа, при этом вы не сможете никак красиво оформить этот список. Он передается одним сплошным массивом из компонента sale.order.ajax. Если вы захотите разделить его на составляющие, придется либо модифицировать компонент, само собой, предварительно вынеся его в свое пространство имен и лишиться обновлений данного компонента. Придется поддерживать его самоcтоятельно

Перехватываем событие формирования письма.

Но. мы можем просто перехватить событие, формирования письма, подмешать в него свои данные и отправить дальше. Для этого используем событие OnOrderNewSendEmail

Создаем событие в файле /local/php_iterface/init.php. Подсказки по коду прямо в нем

//СОБЫТИЕ
AddEventHandler("sale", "OnOrderNewSendEmail", "ModifyOrderSaleMails"); function ModifyOrderSaleMails($orderID, &$eventName, &$arFields) {    if(CModule::IncludeModule("sale") && CModule::IncludeModule("iblock"))    {  //СОСТАВ ЗАКАЗА РАЗБИРАЕМ SALE_ORDER НА ЗАПЧАСТИ       $strOrderList = "";       $dbBasketItems = CSaleBasket::GetList(                  array("NAME" => "ASC"),                  array("ORDER_ID" => $orderID),                  false,                  false,                  array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")                ); while ($arProps = $dbBasketItems->Fetch())  {  //ПЕРЕМНОЖАЕМ КОЛИЧЕСТВО НА ЦЕНУ       $summ = $arProps['QUANTITY'] * $arProps['PRICE'];  //СОБИРАЕМ В СТРОКУ ТАБЛИЦЫ       $strCustomOrderList .= "<tr><td>".$arProps['NAME']."</td><td>".$arProps['QUANTITY']."</td><td>".$arProps['PRICE']."</td><td>".$arProps['CURRENCY']."</td><td>".$summ."</td><tr>";  }  //ОБЪЯВЛЯЕМ ПЕРЕМЕННУЮ ДЛЯ ПИСЬМА  $arFields["ORDER_TABLE_ITEMS"] = $strCustomOrderList;  }  }

Вот и все. Мы создали новую переменную #ORDER_TABLE_ITEMS# для письма, в которую можем подмешивать любые данные, в моем случае просто строка таблицы. Которую можно красиво стилизовать.

Само собой, вы можете создать несколько переменных с отдельными данным, если нужно сильно разнести состав заказа по письму. Вот так:

while ($arProps = $dbBasketItems->Fetch())
 {
  //ДРОБИМ НА ЗАПЧАСТИ
  $name = $arProps['NAME'];
  $quantity = $arProps['QUANTITY'];
  $price =  $arProps['PRICE'];
  $currency = $arProps['CURRENCY'];
  $summ = $arProps['QUANTITY'] * $arProps['PRICE']; 
 }
  //ОБЪЯВЛЯЕМ НОВЫЕ ПЕРМЕННЫЕ ДЛЯ ПИСЬМА
  $arFields["NAME_ITEM"] =  $name;
  $arFields["QUANTITY_ITEM"] =  $quantity;
  $arFields["PRICE_ITEM"] =  $price;
  $arFields["CURRENCY_ITEM"] =  $currency;
  $arFields["SUMM_ITEM"] = $sum;

В принципе, перехватывая данное письмо, можно добавлять любые данные в него. От данных плательщика, местоположения, телефона итд.

Таким образом и сделали что хотели, и не "поломали" компонент оформления заказа

Добавлено: Вывести в почтовое событие данные из свойств заказа

Если нужно добавить в почтовое событие любые данные из свойств заказа. Например: Номер телефона, адрес доставки, местоположение. В общем, что угодно. Можно добавить обработчик:


AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails");
function bxModifySaleMails($orderID, &$eventName, &$arFields)
{
    $additional_information = '';
    $arOrder = CSaleOrder::GetByID($orderID);
    $order_props = CSaleOrderPropsValue::GetOrderProps($orderID);
    while ($arProps = $order_props->Fetch()){
        //контактный телефон
        if ($arProps['ORDER_PROPS_ID']==3){
            $additional_information.='Контактный телефон: '.$arProps['VALUE'];
        }
        //Адрес
        if ($arProps['ORDER_PROPS_ID']==7){
            $additional_information.='Адрес доставки: '.$arProps['VALUE'];
        }
    }
    $arFields["ADD_INFORMATION"] = $additional_information;
}

Просто перечисляете все необходимые свойства (их ID) в блоке


 if ($arProps['ORDER_PROPS_ID']==3){
$additional_information.='Контактный телефон:'.$arProps['VALUE']; }

В итоге, все собирается в #ADD_INFORMATION# - эту переменную и вставляем в нужном месте тела письма "Новый заказ"

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.