Содержание:
Если вы хотите, чтобы при оформлении заказа покупателю пришла не только стандартная информация, определенная в почтовом шаблоне,
то можно использовать событие 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
всех товаров.
Редактируем почтовый шаблон
Теперь все ключи из массива $arField
s вы можете использовать в почтовом шаблоне 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#
ранее никогда не использовал событие OnOrderNewSendEmail. обязательно попробую
Здравствуйте. Подскажите пожалуйста решение по моей задаче. Прочитав инструкцию по ссылке: http://thisis-blog.ru/dobavit-pole-v-pochtovyj-shablon/ я реализовал то, что с помощью этого запроса должно отображаться в письме. Мне не понятно, каким образом узнать email склада и его название, что бы так же включить это в шаблон. Если быть точнее, я не могу понять принцип нахождения ключей для запроса. Заранее благодарю.
Вам нужно получить данные по складу с помощью функций:
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»]);
}
СПАСИБО!!!!!!!!!!!!
Преогромнейшее