Добавить поле в почтовый шаблон

Содержание:

  1. Добавляем обработчик события
  2. Добавляем функцию
  3. Редактируем почтовый шаблон

Если вы хотите, чтобы при оформлении заказа покупателю пришла не только стандартная информация, определенная в почтовом шаблоне,
то можно использовать событие OnOrderNewSendEmail.
Учтите работает оно с 11.5.0 до версии 15.5.0 модуля интернет магазина. В старших версиях нужно использовать события нового ядра, либо поставить галочку «Включить обработку устаревших событи» в настройках модуля Интернет-магазин.

Добавляем обработчик события

Добавляем в файл /bitrix/php_interface/init.php:

AddEventHandler("sale", "OnOrderNewSendEmail", "modifySendingSaleData");

Добавляем функцию

Она как раз и будет модернизировать и добавлять нужные данные в массив, который поступает в почтовый шаблон.
Добавляем в файл /bitrix/php_interface/init.php:

function modifySendingSaleData($orderID, &$eventName, &$arFields) {
    // инициализируем переменные
    $name = '';
    $lastName = '';
    $fullName = '';
    $phone = '';
    $zip = '';
    $countryName = '';
    $obl = '';
    $cityName = '';
    $address = '';
    $deliveryName = '';
    $paySystemName = '';

    // получаем параметры заказа по ID
    $arOrder = CSaleOrder::GetByID($orderID);

    // получаем свойства заказа
    $orderProps = CSaleOrderPropsValue::GetOrderProps($orderID);

    // проходим циклом по всем свойствам и вытаскиваем нужные нам
    while ($arProps = $orderProps->Fetch()) {
        // телефон
        if ($arProps['CODE'] == 'PHONE') {
            $phone = htmlspecialchars($arProps['VALUE']);
        }
        // страну, область, город,
        if ($arProps['CODE'] == 'LOCATION') {
            // если не перешли на местоположения 2.0
            $arLocs = CSaleLocation::GetByID($arProps['VALUE']);
            // если перешли на местоположения 2.0 раскомментируйте следующую строку
            //  и закомментируйте строчку выше
            //$arLocs = CSaleLocation::GetByID(CSaleLocation::getLocationIDbyCODE($arProps['VALUE']));
            $countryName = $arLocs['COUNTRY_NAME_LANG'];
            $obl = $arLocs['REGION_NAME_LANG'];
            $cityName = $arLocs['CITY_NAME_LANG'];
        }
        // индекс
        if ($arProps['CODE'] == 'ZIP'){
            $zip = $arProps['VALUE'];
        }
        // адрес
        if ($arProps['CODE'] == 'ADDRESS') {
            $address = $arProps['VALUE'];
        }
        // имя
        if ($arProps['CODE'] == 'FIRSTNAME') {
            $name = $arProps['VALUE'];
        }
        // фамилия
        if ($arProps['CODE'] == 'LASTNAME') {
            $lastName = $arProps['VALUE'];
        }
    }
    
    $fullName = $lastName .' ' . $name;
    $fullAddress = $zip . ', ' . $countryName . ', ' . $obl . ', ' . $cityName . ', ' . $address;

    // получаем название службы доставки
    $arDeliv = CSaleDelivery::GetByID($arOrder['DELIVERY_ID']);
    if ($arDeliv) {
        $deliveryName = $arDeliv['NAME'];
    }

    // получаем название платежной системы
    $arPaySystem = CSalePaySystem::GetByID($arOrder['PAY_SYSTEM_ID']);
    if ($arPaySystem) {
        $paySystemName = $arPaySystem['NAME'];
    }

    // добавляем полученные значения в результирующий массив
    $arFields['ORDER_DESCRIPTION'] = $arOrder['USER_DESCRIPTION'];
    $arFields['USER_FULL_NAME'] = $fullName;
    $arFields['PHONE'] = $phone;
    $arFields['DELIVERY_NAME'] = $deliveryName;
    $arFields['PAY_SYSTEM_NAME'] = $paySystemName;
    $arFields['FULL_ADDRESS'] = $fullAddress;
}
  • Если город не отображается, то попробуйте в цикл добавить условие if ($arProps['CODE'] == 'CITY')
  • Если хотите изменить отображение таблицы с содержимым заказа, то используйте CSaleBasket::GetList. По id заказа можно получить id всех товаров.

Редактируем почтовый шаблон

Теперь все ключи из массива $arFields вы можете использовать в почтовом шаблоне SALE_NEW_ORDER:

<b>Получатель</b>: #USER_FULL_NAME#
<b>Телефон</b>: #PHONE#
<b>Адрес доставки</b>: #FULL_ADDRESS#
<b>Доп. информация</b>: #USER_DESCRIPTION#
<b>Доставка</b>: #DELIVERY_NAME#
<b>Оплата</b>: #PAY_SYSTEM_NAME#

Рекомендуем к прочтению



7 комментариев

  • boosters:

    ранее никогда не использовал событие OnOrderNewSendEmail. обязательно попробую

  • Филипп:

    Здравствуйте. Подскажите пожалуйста решение по моей задаче. Прочитав инструкцию по ссылке: http://thisis-blog.ru/dobavit-pole-v-pochtovyj-shablon/ я реализовал то, что с помощью этого запроса должно отображаться в письме. Мне не понятно, каким образом узнать email склада и его название, что бы так же включить это в шаблон. Если быть точнее, я не могу понять принцип нахождения ключей для запроса. Заранее благодарю.

    • shapito27:

      Вам нужно получить данные по складу с помощью функций:
      CCatalogStore::GetList
      CCatalogStoreProduct::GetList

      Не делал подобного. Точно сказать не могут. Первое, что приходит в голову:
      В коде вы можете получить id товаров. Они я так понимаю и привязаны к складам? Тогда можно использовать CCatalogStoreProduct::GetList с фильтром по id товара. Получите ID склада, где есть товар. Потом по ID склада можно с помощью CCatalogStore::GetList получить EAMIL склада.

  • Сергей:

    Здравствуйте! Подскажите пожалуйста, как добавить еще стоимость доставки?

  • Константин:

    Здравствуйте! Добавил ваш код. Но почему то вместо полного адреса в письме выводится лишь адрес без города и страны:

    как пример «, -, достоевского 4а».

  • Константин:

    для тех кому интересно, я нашел решение проблемы, вот как надо делать, чтобы выводились данные о местоположении:
    if ($arProps[«TYPE»]==»LOCATION») {
    $arLocs = CSaleLocation::GetByID($arProps[‘VALUE’]);
    $countryName = htmlspecialchars($arLocs[«COUNTRY_NAME»]);
    $obl = htmlspecialchars($arLocs[«REGION_NAME»]);
    $cityName = htmlspecialchars($arLocs[«CITY_NAME»]);
    }

  • Евгения:

    СПАСИБО!!!!!!!!!!!!
    Преогромнейшее

Оставить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.