Россия

Добавить в почтовое уведомление свойство заказа


Иногда, нужно отправлять на почту некоторые свойства заказа, которые, по-умолчанию не входят в массив данных типа почтового события. Для этого используем в 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'];            
            }
        }
    }