Все почтовые сообщения битрикса содержат плейхолделы, с номером заказа, именем заказавшего и т.д. Иногда требуется их заменить "не лету".
Битрикс разработчикам: как изменить значения в письме
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;
}
Еще о событиях можно почитать в официальной документации