Skip to content

Instantly share code, notes, and snippets.

@ArtemSites
Last active August 9, 2019 11:27
Show Gist options
  • Save ArtemSites/1b0201e093f2b6181778e15f5e2196ba to your computer and use it in GitHub Desktop.
Save ArtemSites/1b0201e093f2b6181778e15f5e2196ba to your computer and use it in GitHub Desktop.
Bitrix. Добавление своего макроса #PHONE# к шаблону письма.
// /local/php_interface/init.php
// или
// /bitrix/php_interface/init.php
//После этого появляется макрос #PHONE# в шаблоне письма.
// Регистрируем обработчик
AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails");
//-- Собственно обработчик события
function bxModifySaleMails($orderID, &$eventName, &$arFields) {
// получаем телефон (или еще что-нибудь)
$orderProps = CSaleOrderPropsValue::GetOrderProps($orderID);
$PHONE = "";
while ($arProps = $orderProps->Fetch()) {
if ($arProps["CODE"] == "PHONE")
{
$PHONE = $arProps["VALUE"];
}
//- добавляем новые поля в массив результатов - каждое поле это макрос для почтового события
$arFields["PHONE"] = $PHONE;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
//Более подробно:
function bxModifySaleMails($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;
}
//Станут доступны макросы в шаблоне:
/*
#ORDER_DESCRIPTION#
#USER_DESCRIPTION#
#USER_FULL_NAME#
#PHONE#
#DELIVERY_NAME#
#PAY_SYSTEM_NAME#
#FULL_ADDRESS#
*/
/*
Если город не отображается, то попробуйте в цикл добавить условие if ($arProps['CODE'] == 'CITY')
Если хотите изменить отображение таблицы с содержимым заказа, то используйте CSaleBasket::GetList. По id заказа можно получить id всех товаров.
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment