Создание оформления письма оформления заказа в 1С Битрикс. Список товаров - таблица

Мы будем работать с почтовыми шаблонами, располагающимися в "Администрировании" панели управления 1С Битрикс.

В списке шаблонов найдем шаблон с названием SALE_NEW_ORDER.

Заполним макет шаблона следующим образом:

<b>Здравствуйте, #ORDER_USER#,</b> <br />
Ваш заказ номер #ORDER_ID# от #ORDER_DATE# принят. <br />
Стоимость заказа: #PRICE#<br />
<br />
Состав заказа
<br />
#CUSTOM_ORDER_LIST#<br />
Вы можете следить за выполнением своего заказа (на какой стадии выполнения он находится), войдя в Ваш персональный раздел сайта #SITE_NAME#.<br />
<br />
Обратите внимание, что для входа в этот раздел Вам необходимо будет ввести логин и пароль пользователя сайта #SITE_NAME#.<br />
<br />
Для того, чтобы аннулировать заказ, воспользуйтесь функцией отмены заказа, которая доступна в Вашем персональном разделе сайта #SITE_NAME#.<br />
<br />
Пожалуйста, при обращении к администрации сайта #SITE_NAME# ОБЯЗАТЕЛЬНО указывайте номер Вашего заказа - #ORDER_ID#.<br />
<br />
Спасибо за покупку!<br />

Для работы с новой переменной опишем ее в файле local/php_interface/init.php. Создадим новый обработчик события.
<?php
AddEventHandler("sale", "OnOrderNewSendEmail", "AddMailParams");
function AddMailParams(orderID, &eventName, &$arFields)
{
if(CModule::IncludeModule("sale") && CModule::IncludeModule("iblock"))
{
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $orderID),
false,
false,
array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
$customOrderList = "<table style='border-collapse: collapse;
width: 98%; border: black;
border-width: 1px;
border-style: solid;'>";
$customOrderList .= "<tr>";
$customOrderList .= "<th>Наименование</th>";
$customOrderList .= "<th style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
width: 15%;
'>Цена за единицу</th>";
$customOrderList .= "<th style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>Количество</th>";
$customOrderList .= "<th style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
width: 15%;
'>Цена</th>";
$customOrderList .= "</tr>";
while (arBasketItems=dbBasketItems->Fetch())
{
if (CSaleBasketHelper::isSetItem($val))
continue;
$customOrderList .= "<tr>";
$customOrderList .= "<td style='border: black;
border-width: 1px;
border-style: solid;
'>".$arBasketItems["NAME"]."</td>";
$customOrderList .= "<td style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>".SaleFormatCurrency($arBasketItems["PRICE"], CSaleLang::GetLangCurrency(SITE_ID))."</td>";
$customOrderList .= "<td style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>".arBasketItems["QUANTITY"]."".arBasketItems["WEIGHT"]."</td>";
$customOrderList .= "<td style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>".SaleFormatCurrency(arBasketItems["PRICE"]arBasketItems["QUANTITY"], CSaleLang::GetLangCurrency(SITE_ID))."</td>";
$customOrderList .= "</tr>";
}
$customOrderList .= "</table>";
arFields["CUSTOMORDERLIST"]=customOrderList;
}
}
?>
view raw init.php hosted with ❤ by GitHub
В итоге в письме на почту мы получаем следующую таблицу:

Если у вас на сайте есть возможность оформления быстрого заказа, то измените и его шаблон [NEW_ONE_CLICK_BUY] следующим образом:
<b>Здравствуйте, #CLIENT_NAME#!</b>
<br />
<br />
Ваш заказ № #ACCOUNT_NUMBER# от #RS_DATE_CREATE# принят.
<br />
Стоимость заказа #ORDER_PRICE#
<br />
<br />
Состав заказа:
<br />
#CUSTOM_ORDER_LIST#
<br />
В ближайшее время с Вами свяжется менеджер.
<br />
Спасибо за заказ!
<br />

Возможность быстрого заказа создавалась компанией АСПРО и располагается в папке /bitrix/components/aspro/oneclickbuy.next. Для добавления нового поля в шаблон заказа добавим новый обработчик события в файл init.php.
$eventManager->addEventHandler("main", "OnBeforeEventAdd", "AddMailParams"));
view raw init.php hosted with ❤ by GitHub

Второй способ оформления обработчиков

Вторым способом оформления обработчиков является создание иерархии. В файле init.php пропишем:
<?
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/handlers.php"))
require_once($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/handlers.php");
view raw init.php hosted with ❤ by GitHub
Если рядом с init.php отсутствует папка include, создадим ее. В ней файл - handlers.php. В нем укажем связанные обработчики:
<?php
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/orderMailCustomizer.php"))
require_once($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/orderMailCustomizer.php");
$eventManager = Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("sale", "OnOrderNewSendEmail", array('OrderMailCustomizer', 'OnOrderNewSendEmailHandler'));
$eventManager->addEventHandler("main", "OnBeforeEventAdd", array('OrderMailCustomizer', 'OneClickBuyHandler'));
view raw handlers.php hosted with ❤ by GitHub
Рядом с файлом hanlers.php в папке include создадим новый файл orderMailCustomizer.php. В котором опишем действия добавления новой переменной к шаблону письма:
<?php
class OrderMailCustomizer
{
/**
* @param $orderId
* @param $eventName
* @param $arFields
* Добавляет дополнительный параметр в шаблон письма для нового заказа
* параметр CUSTOM_ORDER_LIST, в котором содержится форматированный заказ в
* виде таблицы
*/
public function OnOrderNewSendEmailHandler(orderId, &eventName, &$arFields)
{
if (!CModule::IncludeModule("sale") || !CModule::IncludeModule("iblock")) return;
arFields["CUSTOMORDERLIST"]=OrderMailCustomizer::GetCustomOrderList(orderId);
}
public function OneClickBuyHandler(event, &siteId, &$arFields)
{
if ($event != 'NEW_ONE_CLICK_BUY') return true;
arFields["CUSTOMORDERLIST"]=OrderMailCustomizer::GetCustomOrderList(arFields['RS_ORDER_ID']);
}
private static function GetCustomOrderList($orderId)
{
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $orderId),
false,
false,
array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $orderID),
false,
false,
array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
$customOrderList = "<table style='border-collapse: collapse;
width: 98%; border: black;
border-width: 1px;
border-style: solid;'>";
$customOrderList .= "<tr>";
$customOrderList .= "<th>Наименование</th>";
$customOrderList .= "<th style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
width: 15%;
'>Цена за единицу</th>";
$customOrderList .= "<th style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>Количество</th>";
$customOrderList .= "<th style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
width: 15%;
'>Цена</th>";
$customOrderList .= "</tr>";
while (arBasketItems=dbBasketItems->Fetch())
{
if (CSaleBasketHelper::isSetItem($val))
continue;
$customOrderList .= "<tr>";
$customOrderList .= "<td style='border: black;
border-width: 1px;
border-style: solid;
'>".$arBasketItems["NAME"]."</td>";
$customOrderList .= "<td style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>".SaleFormatCurrency($arBasketItems["PRICE"], CSaleLang::GetLangCurrency(SITE_ID))."</td>";
$customOrderList .= "<td style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>".arBasketItems["QUANTITY"]."".arBasketItems["WEIGHT"]."</td>";
$customOrderList .= "<td style='text-align: center;
border: black;
border-width: 1px;
border-style: solid;
'>".SaleFormatCurrency(arBasketItems["PRICE"]arBasketItems["QUANTITY"], CSaleLang::GetLangCurrency(SITE_ID))."</td>";
$customOrderList .= "</tr>";
}
$customOrderList .= "</table>";
return $customOrderList;
}
}

Комментарии

Популярные сообщения