Битрикс разработчикам: как изменить значения в письме

26.07.2017

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

Рассмотрим вариант, когда на форме есть несколько разных полей с телефоном (Физ / ЮР лица), выбираем то, которое подходит под тип пользователя и помещаем его в результирующий массив.

Для этого нужно перехватить событие OnOrderNewSendEmail в файле /public_html/bitrix/php_interface/init.php:

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

function bxModifySaleMails($orderID, &$eventName, &$arFields)
{
  $arOrder = CSaleOrder::GetByID($orderID);

  //-- получаем телефоны и адрес
  $order_props = CSaleOrderPropsValue::GetOrderProps($orderID);
  $phone="";
  while ($arProps = $order_props->Fetch())
  {
    if ($arProps["CODE"] == "UL_DEL_PHONE")
    {
       $phone = htmlspecialchars($arProps["VALUE"]);
	}
	elseif($arProps["CODE"] == "FL_PERS_PHONE")
	{
		$phone = htmlspecialchars($arProps["VALUE"]);
	}
	elseif($arProps["CODE"] == "NR_FL_PERS_PHONE")
	{
		$phone = htmlspecialchars($arProps["VALUE"]);
	}
  }


  //-- получаем название платежной системы   
  $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["PAY_SYSTEM_NAME"] =  $pay_system_name;
  
}

Еще о событиях можно почитать в официальной документации


Категории: Bitrix CMS
Пометки: Битрикс, bitrix, почтовые уведомления, плейсхолдеры
Яндекс.Метрика