Иногда, нужно отправлять на почту некоторые свойства заказа, которые, по-умолчанию не входят в массив данных типа почтового события.
Для этого используем в init.php событие OnBeforeEventAdd (перед отправкой почтового уведомления), которым добавляем данные в массив для отправки в почтовом уведомлении.
К примеру, если используем тип почтового события SALE_NEW_ORDER, то можем взять все свойства заказа со значениями. В почтовом шаблоне их значения можно вывести как #PROP_VALUE_КОД_СВОЙСТВА#
AddEventHandler("main", "OnBeforeEventAdd", "OnBeforeEventAddHandlerOrder");
function OnBeforeEventAddHandlerOrder(&$event, &$lid, &$arFields)
{
$order_id = $arFields[ORDER_REAL_ID];
if ($order_id>0) {
$order = CSaleOrder::GetByID($order_id);
if ($event=="SALE_NEW_ORDER" AND $order_id>0) {
CModule::IncludeModule("sale");
$fields4email = array();
$arOrderProps = array();
$rsOrderProps = CSaleOrderPropsValue::GetOrderProps($order_id);
while ($ar = $rsOrderProps->GetNext()) {
$arOrderProps[$ar['CODE']?$ar['CODE']:$ar['ORDER_PROPS_ID']] = $ar;
$val = $ar['VALUE'];
if ($ar['TYPE']=="LOCATION") {
$v = CSaleLocation::GetByID($val);
$val = $v['CITY_NAME_LANG'];
} elseif (in_array($ar['TYPE'], array("SELECT", "MULTISELECT", "RADIO"))) {
$v = CSaleOrderPropsVariant::GetByValue($ar['ORDER_PROPS_ID'], $val);
$val = $v['NAME'];
}
$fields4email[$ar['CODE']?$ar['CODE']:$ar['ORDER_PROPS_ID']] = $val;
}
if (is_array($fields4email) AND !empty($fields4email)) {
foreach ($fields4email as $code=>$prop_val) {
$name = $arOrderProps[$code]['NAME'];
$arFields['PROP_'.$code] = $name.": ".$prop_val;
$arFields['PROP_VALUE_'.$code] = $prop_val;
$arFields['PROP_NAME_'.$code] = $name;
}
}
} elseif ($event=="SALE_ORDER_DELIVERY") {
$arFields['DELIVERY_DOC_NUM'] = $order['DELIVERY_DOC_NUM'];
$arFields['DATE_ALLOW_DELIVERY'] = $order['DATE_ALLOW_DELIVERY'];
}
}
}
Теги: почтовое уведомление, свойство заказа, OnBeforeEventAdd