Битрикс: как добавить новые поля в почтовый шаблон
Полезно в письме о новом заказе вывести некоторые дополнительные поля для полноты информации о заказе. Например, мы сделали простую форму оформления заказа и там у нас есть поле Адрес доставкиЭто поле Адрес доставки (ADDRESS) мы добавили сами в Настройки - Свойства заказа - Список свойств. ADDRESS - это его мнемонический код.
Так как набор свойств передаётся в шаблон исходным кодом ядра, то неудивительно, что прописав в шаблоне нашу переменную #ADDRESS#, мы ничего не получим в письме о новом заказе. Эта переменная окажется пустой.
А нужно написать свой собственный обработчик события оформления заказа в bitrix/php_interface/init.php, вот например так:
AddEventHandler("sale", "OnOrderNewSendEmail", array("OrderNewSendEmail", "OnOrderNewSendEmailHandler"));
Class OrderNewSendEmail
{
function OnOrderNewSendEmailHandler($id_order, &$eventName, &$arFields)
{
$arrOrder = \CSaleOrder::GetByID($id_order);
$arFields['BX_TOTAL_ORDER'] = $arrOrder['PRICE'];
$deliveryPrice = $arrOrder['PRICE_DELIVERY'];
if($deliveryPrice){
$arFields['BX_DELIVERY_PRICE'] = CurrencyFormat($arrOrder['PRICE_DELIVERY'], 'RUB');
}
else{
\Bitrix\Main\Loader::includeModule('sale');
$service = \Bitrix\Sale\Delivery\Services\Manager::getById($arrOrder["DELIVERY_ID"]);
$arFields['BX_DELIVERY_PRICE'] = $service["DESCRIPTION"];
}
$rsOrderProps = \CSaleOrderPropsValue::GetOrderProps($id_order);
while ($arrOrderProps = $rsOrderProps->Fetch()) {
if($arrOrderProps['CODE'] == 'PHONE') {
$arFields['BX_PHONE'] = $arrOrderProps['VALUE'];
}
if($arrOrderProps['CODE'] == 'NAME') {
$arFields['ORDER_USER'] = $arrOrderProps['VALUE'];
}
if($arrOrderProps['CODE'] == 'ADDRESS') {
$arFields['BX_LOCATION'] = $arrOrderProps['VALUE'];
}
}
$arFields['BX_DELIVERY'] = 'Курьером';
$arFields['BX_PAYMENT'] = 'Наличными';
$arFields['ORDER_DATE'] = $arrOrder['DATE_INSERT'];
$arFields['BX_LIST_ITEMS'] = '';
$arFields['BX_TOTAL_DISCOUNT_FORMAT'] = '';
$arBasketElemsPrices = array();
$arProductIDs = array();
$rsBasket = \CSaleBasket::GetList(array(), array('ORDER_ID' => $id_order), false);
while ($arrBasket = $rsBasket->Fetch()) {
$db_res = \CSaleBasket::GetPropsList(
array(
"SORT" => "ASC",
"NAME" => "ASC"
),
array("BASKET_ID" => $arrBasket['ID'], 'PRODUCT_ID' => $arrBasket['PRODUCT_ID'])
);
$arProductIDs[] = $arrBasket['PRODUCT_ID'];
$arThisProps = array();
while ($ar_res = $db_res->Fetch())
{
$arThisProps[$ar_res["CODE"]] = $ar_res["VALUE"];
}
$arBasketElemsPrices[$arrBasket['PRODUCT_ID']] = array(
'PRICE' => $arThisProps['PRICE_WITHOUT_DISCOUNT'],
'PRICE_WITH_DISCOUNT' => CurrencyFormat($arrBasket['PRICE'], 'RUB'),
'SIZE' => $arThisProps['SIZE'],
'QUANTITY' => $arrBasket['QUANTITY']
);
}
$htmlBasket = "<table align=\"center\" class=\"wrapper float-center\" style=\"Margin:0 auto;border-collapse:collapse;border-spacing:0;float:none;margin:0 auto;padding:0;text-align:center;vertical-align:top;width:100%\"><tr style=\"padding:0;text-align:left;vertical-align:top\"><td class=\"wrapper-inner\" style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word\">
<table align=\"center\" class=\"container\" style=\"Margin:0 auto;background:#fff;border-collapse:collapse;border-spacing:0;margin:0 auto;padding:0;text-align:inherit;vertical-align:top;width:580px\"><tbody><tr style=\"padding:0;text-align:left;vertical-align:top\"><td style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word\">
<table width=\"100%\" align=\"center\" style=\"border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top\">
<tr style=\"padding:0;text-align:left;vertical-align:top\">
<td style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;background:#ebe8e1;border-collapse:collapse!important;color:#1c1c1c;font-family:Tahoma,Arial;font-size:14px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word\">
<p class=\"text-center\" style=\"Margin:0;Margin-bottom:10px;color:#1c1c1c;font-family:Tahoma,Arial;font-size:13px;font-weight:400;line-height:1.3;margin:0;margin-bottom:10px;padding:0;padding-top:8px;text-align:center\">В ЗАКАЗЕ</p>
</td>
</tr>
<tr style=\"padding:0;text-align:left;vertical-align:top\">
<td style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#1c1c1c;font-family:Tahoma,Arial;font-size:14px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word\">";
if(!empty($arProductIDs)) {
$rsElems = CIBlockElement::GetList(
array(),
array('IBLOCK_ID' => 2, 'ID' => $arProductIDs),
false,
false,
array(
'NAME',
'ID',
'DETAIL_PAGE_URL'
));
$arBasketElemsInfo = array();
while ($arrElems = $rsElems->Fetch()) {
$arBasketElemsInfo = array(
'NAME' => $arrElems['NAME'],
'PRICE' => ($arBasketElemsPrices[$arrElems['ID']]['PRICE']) ? $arBasketElemsPrices[$arrElems['ID']]['PRICE'] : $arBasketElemsPrices[$arrElems['ID']]['PRICE_WITH_DISCOUNT'],
'PRICE_WITH_DISCOUNT' => $arBasketElemsPrices[$arrElems['ID']]['PRICE_WITH_DISCOUNT'],
'QUANTITY' => $arBasketElemsPrices[$arrElems['ID']]['QUANTITY'],
'DETAIL_PAGE_URL' => $arrElems['DETAIL_PAGE_URL']
);
$res = CIBlockElement::GetProperty(2, $arrElems['ID'], array(), array("CODE" => "MORE_PHOTO"));
if ($arProp = $res->Fetch()) {
$arFilter = array("name" => "sharpen", "precision" => 85);
$arFile = CFile::GetFileArray($arProp["VALUE"]);
$arFileTmp = CFile::ResizeImageGet(
$arFile,
array("width" => 141, "height" => 141),
BX_RESIZE_IMAGE_EXACT,
true, $arFilter
);
}
if($arFileTmp["src"]){
$arBasketElemsInfo["PICTURE"] = $arFileTmp["src"];
}
else{
$arBasketElemsInfo["PICTURE"] = "/bitrix/components/decor/catalog/templates/.default/decor/catalog.section/.default/images/no_photo.png";
}
$htmlBasket .= "<table width=\"90%\" align=\"center\" style=\"border-bottom:1px solid #eee;border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top\">
<tr style=\"padding:0;text-align:left;vertical-align:top\">
<td style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word\">
<table class=\"spacer\" style=\"border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%\"><tbody><tr style=\"padding:0;text-align:left;vertical-align:top\"><td style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Tahoma,Arial;font-size:8px;font-weight:400;hyphens:auto;line-height:8px;margin:0;mso-line-height-rule:exactly;padding:0;text-align:left;vertical-align:top;word-wrap:break-word\"> </td></tr></tbody></table>
<table class=\"row\" style=\"border-collapse:collapse;border-spacing:0;display:table;padding:0;position:relative;text-align:left;vertical-align:top;width:100%\"><tbody><tr style=\"padding:0;text-align:left;vertical-align:top\">
<th class=\"small-12 large-4 columns first\" style=\"Margin:0 auto;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:16px;padding-left:16px;padding-right:8px;text-align:left;width:177.33px\"><table style=\"border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%\"><tr style=\"padding:0;text-align:left;vertical-align:top\"><th style=\"Margin:0;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left\">
<img width=\"141\" src=\"{$arBasketElemsInfo['PICTURE']}\" alt=\"\" title=\"\" style=\"-ms-interpolation-mode:bicubic;clear:both;display:block;max-width:100%;outline:0;text-decoration:none;width:auto\">
</th></tr></table></th>
<th class=\"product-title small-12 large-4 columns\" style=\"Margin:0 auto;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:16px;padding-left:8px;padding-right:8px;text-align:left;width:177.33px\"><table style=\"border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%\"><tr style=\"padding:0;text-align:left;vertical-align:top\"><th style=\"Margin:0;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left\">
<font style=\"font-size:14px;display:inline-block;text-decoration:none;\">{$arBasketElemsInfo['NAME']}</font><br>
<b>{$arBasketElemsInfo['PRICE_WITH_DISCOUNT']}</b>
</th></tr></table></th>
<th class=\"small-12 large-4 columns last\" style=\"Margin:0 auto;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;line-height:1.3;margin:0 auto;padding:0;padding-bottom:16px;padding-left:8px;padding-right:16px;text-align:left;width:177.33px\"><table style=\"border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%\"><tr style=\"padding:0;text-align:left;vertical-align:top\"><th style=\"Margin:0;color:#0a0a0a;font-family:Tahoma,Arial;font-size:14px;font-weight:400;line-height:1.3;margin:0;padding:0;text-align:left\">
<table width=\"100%\" align=\"center\" style=\"border-collapse:collapse;border-spacing:0;padding:0;text-align:left;vertical-align:top;width:100%\">
<tr style=\"padding:0;text-align:left;vertical-align:top\"><td style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#666;font-family:Tahoma,Arial;font-size:12px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:break-word\">Количество</td><td class=\"text-right\" style=\"-moz-hyphens:auto;-webkit-hyphens:auto;Margin:0;border-collapse:collapse!important;color:#0a0a0a;font-family:Tahoma,Arial;font-size:11px;font-weight:400;hyphens:auto;line-height:1.3;margin:0;padding:0;text-align:right;vertical-align:top;word-wrap:break-word\">{$arBasketElemsInfo['QUANTITY']}</td></tr>
</table>
</th></tr></table></th>
</tr></tbody></table>
</td>
</tr>
</table>";
}
}
$htmlBasket .= " </td>
</tr>
</table>
</td></tr></tbody></table>
</td></tr></table>";
$arFields['BASKET_ITEMS'] = $htmlBasket;
}
}
Теперь переменную BX_LOCATION можно использовать в почтовом шаблоне - #BX_LOCATION#
.
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- Битрикс: как добавить новые поля в почтовый шаблон (11.12.2017) ← вы тут
- Формы в Битриксе сделать в оформлении Bootstrap (07.12.2017)
- Артефакты при ресайзе библиотекой GD изображений с однородным (белым) фоном (07.12.2017)
- Owl Carousel 2 и Битрикс. Настройка слайдера (26.11.2017)
- Битрикс: проверка отправленных писем (26.11.2017)
- Битрикс: оформление заказа, упрощаем компонент sale.order.ajax (27.11.2017)
- Изменения в конфиге битрикса после переноса сайта. Подключение к БД (22.11.2017)
- Битрикс на поддомене. Неудобство с переменной DocumentRoot. Для хостинга Reg.ru (22.11.2017)
- Смена кодировки Битрикса с windows-1251 в UTF-8 (utf8) (01.12.2017)
- Битрикс: проверка на главной ли странице находимся (и другие проверки) (30.10.2017)
- Битрикс: правила обработки адресов и urlrewrite (30.10.2017)
- Как сделать разный title и H1 в Битриксе (30.10.2017)
- Почистить кеш Bitrix. Как удалить весь кеш в Битриксе? (20.06.2017)
- 1С-Битрикс: Карта сайта Google Sitemap в Битриксе (22.10.2011)
- 1С-Битрикс: Вывод свойства в детальный просмотр новости для полей типа HTML/текст (24.08.2011)
- Создание шаблона в 1С-Битрикс (23.10.2011)
- Разные шаблоны у главной и у внутренних страниц сайта на Битриксе (19.12.2011)
- Прототип шаблона дизайна сайта в 1С-Битрикс (23.10.2011)


