Skip to content

Instantly share code, notes, and snippets.

@madcatgith
Last active July 11, 2018 14:47
Show Gist options
  • Save madcatgith/6544cfd52c9ee22a7aac4b191d1831b2 to your computer and use it in GitHub Desktop.
Save madcatgith/6544cfd52c9ee22a7aac4b191d1831b2 to your computer and use it in GitHub Desktop.
Красивое письмо нового заказа Bitrix
----------------------------------------------------Доступные поля----------------------------------------------------------------------
Доступные поля:
#ORDER_ID# - код заказа
#ORDER_DATE# - дата заказа
#ORDER_USER# - заказчик
#PRICE# - сумма заказа
#EMAIL# - E-Mail заказчика
#BCC# - E-Mail скрытой копии
#ORDER_LIST# - состав заказа
#SALE_EMAIL# - E-Mail отдела продаж
#ORDER_PUBLIC_URL# - ссылка для просмотра заказа без авторизации (требуется настройка в модуле интернет-магазина)
#COUPON# - Код купона
#COUPON_ID# - ID купона
#DEFAULT_EMAIL_FROM# - E-Mail адрес по умолчанию (устанавливается в настройках)
#SITE_NAME# - Название сайта (устанавливается в настройках)
#SERVER_NAME# - URL сервера (устанавливается в настройках)
----------------------------------------------------Пример письма-----------------------------------------------------------------------
<style>
body
{
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 12px;
color: #000;
}
</style> <br>
<table cellpadding="0" cellspacing="0" width="100%" style="background-color: #d1d1d1; border-radius: 2px; border:1px solid #d1d1d1; margin: 0 auto;" border="1" bordercolor="#d1d1d1">
<tbody>
<tr>
<td height="73" width="100%" bgcolor="#fff" style="border: none; padding-top: 23px; padding-right: 17px; padding-bottom: 24px; padding-left: 17px;">
<table cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td bgcolor="#ffffff" height="45" style="font-weight: bold; text-align: center; font-size: 16px; color: #0b3961;">
Благодарим Вас за заказ в нашем магазине.
</td>
</tr>
<tr>
<td bgcolor="#ffffff" height="45" style="font-weight: bold; text-align: center; font-size: 16px; color: #0b3961;">
Ваш заказ #ORDER_ID#&nbsp;от #ORDER_DATE# принят в обработку
</td>
</tr>
<tr>
<td bgcolor="#bad3df" height="11">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td width="100%" bgcolor="#f7f7f7" valign="top" style="border: none; padding-top: 0; padding-right: 44px; padding-bottom: 16px; padding-left: 44px;">
<p style="margin-top:30px; margin-bottom: 28px; font-weight: bold; font-size: 19px;">
</p>
<p style="margin-top: 0; margin-bottom: 20px; line-height: 20px;">
<b><u>Данный документ не является основанием для оплаты.</u></b> Пожалуйста, ожидайте звонка оператора для подтверждения заказа. Счет на оплату будет выслан Вам после согласования заказа менеджером.
</p>
<b>Данные заказа:</b>
<hr>
#ORDER_PROPS# <br>
<br>
#COMMENT#<br>
<hr>
#PAY_SYSTEM#<br>
#DELIVERY#<br>
В заказе был применен купон <b>#COUPON#</b><br>
<hr>
<b><b>Состав заказа:</b><br>
#ORDER_LIST#<br>
<br>
<b>Итоговая стоимость заказа: #PRICE# руб. с НДС.</b><br>
<br>
<hr>
Для того, чтобы аннулировать заказ, воспользуйтесь функцией отмены заказа, которая доступна в Вашем персональном разделе сайта #SITE_NAME#.<br>
<br>
Пожалуйста, при обращении к администрации сайта #SITE_NAME# ОБЯЗАТЕЛЬНО указывайте номер Вашего заказа - #ORDER_ID#.<br>
<br>
Спасибо за покупку!<br>
<p>
</p>
</b>
</td>
</tr>
<tr>
<td height="40px" width="100%" bgcolor="#f7f7f7" valign="top" style="border: none; padding-top: 0; padding-right: 44px; padding-bottom: 30px; padding-left: 44px;">
<p style="border-top: 1px solid #d1d1d1; margin-bottom: 5px; margin-top: 0; padding-top: 20px; line-height:21px;">
С уважением,<br>
администрация <a href="http://#SERVER_NAME#" style="color:#2e6eb6;">Интернет-магазина</a><br>
E-mail: <a href="mailto:#SALE_EMAIL#" style="color:#2e6eb6;">#SALE_EMAIL#</a>
</p>
</td>
</tr>
</tbody>
</table>
<?
AddEventHandler('main', 'OnBeforeEventSend', Array("beforeCEvent", "my_OnBeforeEventSend"));
class beforeCEvent
{
function getDelivery($id){
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("sale");
if ($arDeliv = CSaleDelivery::GetByID($id))
{
return $arDeliv["NAME"];
}
}
function getPaysystem($id){
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("sale");
if ($arPaySys = CSalePaySystem::GetByID($id))
{
return $arPaySys["PSA_NAME"];
}
}
function getOrderParams($orderID){
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("sale");
$arResult = CSaleOrder::GetByID($orderID);
return $arResult;
}
function getOrderProps($orderID){
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("sale");
$db_props = CSaleOrderPropsValue::GetOrderProps($orderID);
while ($arProps = $db_props->Fetch()){
$arResult[] = $arProps;
}
return $arResult;
}
function getOrder($orderID){
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("sale");
$dbBasketItems = CSaleBasket::GetList(array(), array("ORDER_ID" => $orderID), false, false, array("ID", "NAME", "PRODUCT_ID", "QUANTITY", "PRICE", "CURRENCY"));
while ($arItems = $dbBasketItems->Fetch())
{
$arBasketItems['ITEMS'][] = $arItems;
$arBasketItems['IDS'][] = $arItems['PRODUCT_ID'];
}
return $arBasketItems;
}
function getItems($ids){
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");
$arSelect = Array('IBLOCK_ID', 'ID', 'NAME', 'PROPERTY_CML2_ARTICLE', 'PROPERTY_CML2_LINK');
$arFilter = Array('IBLOCK_ID' => array(27, 60), 'ID' => $ids);
$res = CIBlockElement::GetList(Array('PROPERTY_CML2_ARTICLE' => 'ASC'), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
$arResult['ITEMS'][$arFields['ID']] = $arFields;
$arResult['IDS'][] = $arFields['PROPERTY_CML2_LINK_VALUE'];
}
return $arResult;
}
function my_OnBeforeEventSend(&$arFields, $arTemplate)
{
if($arTemplate['ID'] == 94){
$arBasketItems = self::getOrder($arFields['ORDER_REAL_ID']);
$arResult = self::getItems($arBasketItems['IDS']);
$arResult_SKU = self::getItems($arResult['IDS']);
$orderProps = self::getOrderProps($arFields['ORDER_REAL_ID']);
$order = self::getOrderParams($arFields['ORDER_REAL_ID']);
if($order['USER_DESCRIPTION']){
$arFields['COMMENT'] = '<b>Комментарий:</b> '.$order['USER_DESCRIPTION'];
} else {
$arFields['COMMENT'] = '';
}
$paysystem = self::getPaysystem($order['PAY_SYSTEM_ID']);
if(!empty($paysystem)){
$arFields['PAY_SYSTEM'] = '<b>Способ оплаты:</b> '.$paysystem;
} else {
$arFields['PAY_SYSTEM'] = '';
}
$delivery = self::getDelivery($order['DELIVERY_ID']);
if(!empty($delivery)){
$arFields['DELIVERY'] = '<b>Способ доставки:</b> '.$delivery;
} else {
$arFields['DELIVERY'] = '';
}
foreach($orderProps as $prop){
if(!empty($prop['VALUE'])){
if($prop['CODE'] == 'LOCATION'){
$arLocs = CSaleLocation::GetByID($prop['VALUE']);
$propsString .= '<strong>'.$prop['NAME'].':</strong> '.$arLocs['COUNTRY_NAME'].' '.$arLocs['REGION_NAME'].' '.$arLocs['CITY_NAME'].'<br>';
} else {
$propsString .= '<strong>'.$prop['NAME'].':</strong> '.$prop['VALUE'].'<br>';
}
}
}
$arFields['ORDER_PROPS'] = $propsString;
$table = '<table border="1" bordercolor="black" cellpadding="0" cellspacing="0"><thead><tr>';
$table .= '<td style="padding: 5px;">№</td>';
$table .= '<td style="padding: 5px;">Артикул</td>';
$table .= '<td style="padding: 5px;">Наименование</td>';
$table .= '<td style="padding: 5px;">Кол-во</td>';
$table .= '<td style="padding: 5px;">Цена c НДС, руб</td>';
$table .= '<td style="padding: 5px;">Сумма c НДС, руб</td>';
$table .= '</tr></thead><tbody>';
foreach($arBasketItems['ITEMS'] as $key => $arItem){
$price = $arItem['PRICE'];
$q = $arItem['QUANTITY'];
$curr = $arItem['CURRENCY'];
if($arResult['ITEMS'][$arItem['PRODUCT_ID']]['PROPERTY_CML2_LINK_VALUE']){
$art = $arResult_SKU['ITEMS'][$arResult['ITEMS'][$arItem['PRODUCT_ID']]['PROPERTY_CML2_LINK_VALUE']]['PROPERTY_CML2_ARTICLE_VALUE'];
} else {
$art = $arResult['ITEMS'][$arItem['PRODUCT_ID']]['PROPERTY_CML2_ARTICLE_VALUE'];
}
$table .= '<tr>';
$table .= '<td style="padding: 5px;">'.($key+1).'.</td>';
$table .= '<td style="padding: 5px;">'.$art.'</td>';
$table .= '<td style="padding: 5px;">'.$arItem['NAME'].'</td>';
$table .= '<td style="padding: 5px;">'.$q.'</td>';
$table .= '<td style="padding: 5px;">'.CCurrencyLang::CurrencyFormat($price, 'BYN').'</td>';
$table .= '<td style="padding: 5px;">'.CCurrencyLang::CurrencyFormat($price*$q, 'BYN').'</td>';
$table .= '</tr>';
}
$table .= '</tbody>';
$table .= '</table>';
$arFields['ORDER_LIST'] = $table;
}
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment