Содержание:
Если вы хотите, чтобы при оформлении заказа покупателю пришла не только стандартная информация, определенная в почтовом шаблоне,
то можно использовать событие 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#
ранее никогда не использовал событие 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»]);
}
СПАСИБО!!!!!!!!!!!!
Преогромнейшее