Добавляем поля в почтовое уведомление о новом заказе в Bitrix

Сегодня у нас встала задача добавить дополнительные поля в почтовое уведомление о новом заказе. Мы будем добавлять такие поля, как «название службы доставки», «телефон клиента», «название способа оплаты», «полный адрес клиента».
Для этого нам потребуется изменить шаблон почтового события SALE_NEW_ORDER.

enviar_newsletters[1]

В шаблон был добавлен следующий текст:

Контактный телефон: #<strong>PHONE</strong># 
Комментарий: 
#<strong>ORDER_DESCRIPTION</strong># 
Служба доставки: #<strong>DELIVERY_NAME</strong># 
Способ оплаты: #<strong>PAY_SYSTEM_NAME</strong># 
Адрес доставки: #<strong>FULL_ADDRESS</strong># 

Добавляем обработчик события «перед отправкой почтового уведомления о заказе». Для этого придется отредактировать файл /bitrix/php_interface/init.php и добавить в него следующий код:

 //-- Добавление обработчика события

AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails");

//-- Собственно обработчик события

function bxModifySaleMails($orderID, &$eventName, &$arFields)
{
  $arOrder = CSaleOrder::GetByID($orderID);
  
  //-- получаем телефоны и адрес
  $order_props = CSaleOrderPropsValue::GetOrderProps($orderID);
  $phone="";
  $index = ""; 
  $country_name = "";
  $city_name = "";  
  $address = "";
  while ($arProps = $order_props->Fetch())
  {
    if ($arProps["CODE"] == "PHONE")
    {
       $phone = htmlspecialchars($arProps["VALUE"]);
    }
    if ($arProps["CODE"] == "LOCATION")
    {
        $arLocs = CSaleLocation::GetByID($arProps["VALUE"]);
        $country_name =  $arLocs["COUNTRY_NAME_ORIG"];
        $city_name = $arLocs["CITY_NAME_ORIG"];
    }

    if ($arProps["CODE"] == "INDEX")
    {
      $index = $arProps["VALUE"];   
    }

    if ($arProps["CODE"] == "ADDRESS")
    {
      $address = $arProps["VALUE"];
    }
  }

  $full_address = $index.", ".$country_name."-".$city_name.", ".$address;

  //-- получаем название службы доставки
  $arDeliv = CSaleDelivery::GetByID($arOrder["DELIVERY_ID"]);
  $delivery_name = "";
  if ($arDeliv)
  {
    $delivery_name = $arDeliv["NAME"];
  }

  //-- получаем название платежной системы   
  $arPaySystem = CSalePaySystem::GetByID($arOrder["PAY_SYSTEM_ID"]);
  $pay_system_name = "";
  if ($arPaySystem)
  {
    $pay_system_name = $arPaySystem["NAME"];
  }

  //-- добавляем новые поля в массив результатов
  $arFields["ORDER_DESCRIPTION"] = $arOrder["USER_DESCRIPTION"]; 
  $arFields["PHONE"] =  $phone;
  $arFields["DELIVERY_NAME"] =  $delivery_name;
  $arFields["PAY_SYSTEM_NAME"] =  $pay_system_name;
  $arFields["FULL_ADDRESS"] = $full_address;   
}
 

Данный пример хорошо себя зарекомендовал в CMS 1С-Битрикс: Управление сайтом 14.0.15
Данный пример был подготовлен и рассмотрен Луценко Дмитрием (http://dev.1c-bitrix.ru/community/webdev/user/50449/blog/4218/), за что ему большое спасибо.

Понравилась статья? - поделись с друзьями!

Категория: CMS

  • Игорь Леб

    Как сделать уведомление о новом элементе в конкретной категории инфоблока?

    • Насколько я понял необходимо добавить обработчик с событием OnBeforeIBlockElementAdd, и использовать условие:
      if($arFields[«IBLOCK_ID»] == «ID инфоблока» and $arFields[«SECTION_ID»] == «ID раздела»)

      • Игорь Леб

        почему-то не выполняется условие. Не отсылается

        function IBElementCreateHandler(&$arFields) {
        $SITE_ID = ‘s1’; // идентификатор сайта
        $IBLOCK_ID = 9; // ID нужного инфоблока
        $SECTION_ID = 923; // ID категории
        $EVENT_TYPE = ‘WF_NEW_IBLOCK_N_ELEMENT’; // тип почтового шаблона
        if($arFields[‘IBLOCK_ID’]==$IBLOCK_ID && $arFields[‘SECTION_ID’]==$SECTION_ID) {

        • function IBElementCreateHandler(&$arFields) {
          var_dump($arFields) ; // посмотреть правильность IBLOCK_ID и SECTION_ID с ID в условиях.