Дата и стомость доставки в шаблон письма заказа в 1С-Битрикс
Добавляем в шаблон письма о новом заказе в CMS 1С-Битрикс дату и стоимость доставки.


Все началось с того что нам прилетело письмо от Яндекса:
Заказ на сайте магазина не был подтверждён в течение часа
Сотрудник Маркета оформил заказ на сайте магазина. В ответ ему пришло автоматическое уведомление, в котором не было важной информации о заказе: даты и стоимости доставки.
И задача звучит вообще не сложно, но дело в том что данная информация о доставке не доступна в штатом функционале редактора почтового шаблона, а нам она очень нужна!
Что вообще делаем?
Хотим что бы в почтовом шаблоне были доступны новые «поля»
#ORDER_DESCRIPTION# - комментарий пользователя
#PHONE# - телефон
#DELIVERY_NAME# - название службы доставки
#DELIVERY_PRICE# - цена доставки
#DELIVERY_PERIOD_TYPE# в чем измеряется срок доставки
#DELIVERY_PERIOD_FROM# - минимальный срок доставки
#DELIVERY_PERIOD_TO# - максимальный срок доставки
#FULL_ADDRESS# - адрес доставки
#PAY_SYSTEM_NAME# - платежная система
Пошаговую инструкцию можно увидеть на видео, а ниже информация которая нам необходима:
По адресу bitrix/php_interface/ создаем файл init.php
Внимание!!! Если файл init.php у вас уже есть первую строчку «<?» - убираем и добавляем все что после нее в Ваш файл 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"];
}
//-- генерируем срок достаки
$delivery_period_type = "";
switch ($arDeliv["PERIOD_TYPE"]) {
case "D":
$delivery_period_type = "дней";
break;
case "H":
$delivery_period_type = "часов";
break;
case "M":
$delivery_period_type = "месяцев";
break;
}
//-- получаем название платежной системы
$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["DELIVERY_PRICE"] = $arOrder["PRICE_DELIVERY"];
$arFields["DELIVERY_PERIOD_TYPE"] = $delivery_period_type;
$arFields["DELIVERY_PERIOD_FROM"] = $arDeliv["PERIOD_FROM"];
$arFields["DELIVERY_PERIOD_TO"] = $arDeliv["PERIOD_TO"];
$arFields["FULL_ADDRESS"] = $full_address;
$arFields["PAY_SYSTEM_NAME"] = $pay_system_name;
}
Переходим в Админ меню в Настройки -> Настройки продукта -> Почтовые события -> Почтовые шаблоны
Находим там тип почтового события: [SALE_NEW_ORDER] и добавляем нужную нам информацию:
Способ оплаты: #PAY_SYSTEM_NAME# Служба доставки: #DELIVERY_NAME# Стоимость доставки: #DELIVERY_PRICE# руб. Адрес доставки: #FULL_ADDRESS# Внимание! Срок доставки от #DELIVERY_PERIOD_FROM# до #DELIVERY_PERIOD_TO# #DELIVERY_PERIOD_TYPE# Для уточнения точного времени доставки с Вами свяжется наш менеджер! Если доставка осуществляешься Транспортной компанией её стоимость может измениться в зависимости от тарифов Транспортной компании. Комментарий: #ORDER_DESCRIPTION#
По мотивам статьи: Дополнительные поля в почтовом уведомлении о новом заказе