[QUOTE]Алексей Майдокин написал:
Юрий Шубин, если у вас получится с component_epilog.php, расскажите об этом.
А я расскажу, как у нас получилось с событиями. Я лишь руководил процессом, а код писал другой человек, поэтому в нем могут быть неточности.
Мы перепробовали кучу событий модуля sale и со всеми были проблемы: то они не вызываются в нужном компоненте, то они вызываются слишком рано. В итоге, я вспомнил, что мы тут пытаемся почту обработать, поэтому мы обратились к событию 'OnBeforeEventAdd', которое вызывается перед отправкой почты.
Дельше все просто. Пишем обработчик события:
[CODE] static function sendOrderMessage($arEvent, &$event, &$lid, &$arFields)
{
if ($arEvent == "SALE_NEW_ORDER")
{
$orderId = $lid['ORDER_ID'];
$result = CSaleOrderPropsValue::GetList(array(),array('ORDER_ID' => $orderId,'CODE' => 'phone'));
$arProps = array();
while ($arProp = $result->Fetch())
{
$arProps[] = $arProp;
}
$phone = $arProps[0]['VALUE'];
$arFields['PHONE'] = $phone;
$lid['PHONE'] = $phone;
}
}
AddEventHandler('main', 'OnBeforeEventAdd', array('myEvents', 'sendOrderMessage'));
[/CODE]
.[/QUOTE]
Можно еще вот так:
[CODE]function sendOrderMessage(&$event, &$lid, &$arFields)
{
// Новый заказ -> добавляем номер телефона
if ($event == "SALE_NEW_ORDER")
{
$orderId = $arFields['ORDER_ID'];
$arOrder = CSaleOrder::GetByID($orderId);
$arFields['USER_DESCRIPTION'] = $arOrder['USER_DESCRIPTION']; //комментарий покупателя
$delivery = CSaleDelivery::GetByID($arOrder['DELIVERY_ID']);
$arFields['DELIVERY_NAME'] = $delivery['NAME']; //служба доставки
$paySystem = CSalePaySystem::GetByID($arOrder['PAY_SYSTEM_ID']);
$arFields['PAY_SYSTEM_NAME'] = $paySystem['NAME']; //способ оплаты
//телефон, заберу заказ в, адрес
$result = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $orderId, '@CODE' => array("PHONE", "COLL_DATE", "ADDRESS")));
while ($arSales = $result->Fetch())
{
$arFields[$arSales['CODE']] = $arSales['VALUE'];
}
}
}
[/CODE]
Юрий Шубин, если у вас получится с component_epilog.php, расскажите об этом.
А я расскажу, как у нас получилось с событиями. Я лишь руководил процессом, а код писал другой человек, поэтому в нем могут быть неточности.
Мы перепробовали кучу событий модуля sale и со всеми были проблемы: то они не вызываются в нужном компоненте, то они вызываются слишком рано. В итоге, я вспомнил, что мы тут пытаемся почту обработать, поэтому мы обратились к событию 'OnBeforeEventAdd', которое вызывается перед отправкой почты.
Дельше все просто. Пишем обработчик события:
[CODE] static function sendOrderMessage($arEvent, &$event, &$lid, &$arFields)
{
if ($arEvent == "SALE_NEW_ORDER")
{
$orderId = $lid['ORDER_ID'];
$result = CSaleOrderPropsValue::GetList(array(),array('ORDER_ID' => $orderId,'CODE' => 'phone'));
$arProps = array();
while ($arProp = $result->Fetch())
{
$arProps[] = $arProp;
}
$phone = $arProps[0]['VALUE'];
$arFields['PHONE'] = $phone;
$lid['PHONE'] = $phone;
}
}
AddEventHandler('main', 'OnBeforeEventAdd', array('myEvents', 'sendOrderMessage'));
[/CODE]
.[/QUOTE]
Можно еще вот так:
[CODE]function sendOrderMessage(&$event, &$lid, &$arFields)
{
// Новый заказ -> добавляем номер телефона
if ($event == "SALE_NEW_ORDER")
{
$orderId = $arFields['ORDER_ID'];
$arOrder = CSaleOrder::GetByID($orderId);
$arFields['USER_DESCRIPTION'] = $arOrder['USER_DESCRIPTION']; //комментарий покупателя
$delivery = CSaleDelivery::GetByID($arOrder['DELIVERY_ID']);
$arFields['DELIVERY_NAME'] = $delivery['NAME']; //служба доставки
$paySystem = CSalePaySystem::GetByID($arOrder['PAY_SYSTEM_ID']);
$arFields['PAY_SYSTEM_NAME'] = $paySystem['NAME']; //способ оплаты
//телефон, заберу заказ в, адрес
$result = CSaleOrderPropsValue::GetList(array(), array('ORDER_ID' => $orderId, '@CODE' => array("PHONE", "COLL_DATE", "ADDRESS")));
while ($arSales = $result->Fetch())
{
$arFields[$arSales['CODE']] = $arSales['VALUE'];
}
}
}
[/CODE]