RSS-подписка

RSS-лента

Новые статьи

Последние комментарии


Получать обновления на эл. почту

Ваш e-mail:

Рассылка новостей от Loco

Битрикс: как добавить новые поля в почтовый шаблон

Нет картинки Полезно в письме о новом заказе вывести некоторые дополнительные поля для полноты информации о заказе. Например, мы сделали простую форму оформления заказа и там у нас есть поле Адрес доставки

Это поле Адрес доставки (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\">&#xA0;</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#

.

 

 

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.