Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битрикс "Новый заказ", у вас это не получится, так как переменная ORDER_LIST формируется в модуле sale.order.ajax. Само собой, можно пойти по пути наименьшего сопротивления, изменить компонент заказа. Но есть способ проще и гибче.
Итак: В почтовом событии "Новый заказ", нам доступен ряд переменных. Одной из которых является #ORDER_LIST#
В этой переменной отдается состав заказа, при этом вы не сможете ни как красиво оформить этот список. Он передается одним сплошным массивом из компонента sale.order.ajax. Если вы захотите разделить его на составляющие, придется либо модифицировать компонент, само собой, предварительно вынеся его в свое пространство имен и лишиться обновлений данного компонента. Придется поддерживать его самоcтоятельно
Перехватываем событие формирования письма.
Но. мы можем просто перехватить событие, формирования письма, подмешать в него свои данные и отправить дальше. Для этого используем событие OnOrderNewSendEmail
Создаем событие в файле /local/php_iterface/init.php. Подсказки по коду прямо в нем
//СОБЫТИЕ
AddEventHandler("sale", "OnOrderNewSendEmail", "ModifyOrderSaleMails");
function ModifyOrderSaleMails($orderID, &$eventName, &$arFields)
{
if(CModule::IncludeModule("sale") && CModule::IncludeModule("iblock"))
{
//СОСТАВ ЗАКАЗА РАЗБИРАЕМ SALE_ORDER НА ЗАПЧАСТИ
$strOrderList = "";
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $orderID),
false,
false,
array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
while ($arProps = $dbBasketItems->Fetch())
{
//ПЕРЕМНОЖАЕМ КОЛИЧЕСТВО НА ЦЕНУ
$summ = $arProps['QUANTITY'] * $arProps['PRICE'];
//СОБИРАЕМ В СТРОКУ ТАБЛИЦЫ
$strCustomOrderList .= "<tr><td>".$arProps['NAME']."</td><td>".$arProps['QUANTITY']."</td><td>".$arProps['PRICE']."</td><td>".$arProps['CURRENCY']."</td><td>".$summ."</td><tr>";
}
//ОБЪЯВЛЯЕМ ПЕРЕМЕННУЮ ДЛЯ ПИСЬМА
$arFields["ORDER_TABLE_ITEMS"] = $strCustomOrderList;
}
}
Вот и все. Мы создали новую переменную #ORDER_TABLE_ITEMS# для письма, в которую можем подмешивать любые данные, в моем случае просто строка таблицы. Которую можно красиво стилизовать.
Само собой, вы можете создать несколько переменных с отдельными данным, если нужно сильно разнести состав заказа по письму. Вот так:
while ($arProps = $dbBasketItems->Fetch())
{
//ДРОБИМ НА ЗАПЧАСТИ
$name = $arProps['NAME'];
$quantity = $arProps['QUANTITY'];
$price = $arProps['PRICE'];
$currency = $arProps['CURRENCY'];
$summ = $arProps['QUANTITY'] * $arProps['PRICE'];
}
//ОБЪЯВЛЯЕМ НОВЫЕ ПЕРМЕННЫЕ ДЛЯ ПИСЬМА
$arFields["NAME_ITEM"] = $name;
$arFields["QUANTITY_ITEM"] = $quantity;
$arFields["PRICE_ITEM"] = $price;
$arFields["CURRENCY_ITEM"] = $currency;
$arFields["SUMM_ITEM"] = $sum;
И в принципе, перехватывая данное письмо, можно добавлять любые данные в письмо. От данных плательщика, местоположения, телефона итд. Тех переменных которых нет в типовом шаблоне письма
Таким образом и сделали что хотели, и не "поломали" компонент оформления заказа
Добавлено: Вывести в почтовое событие данные из свойств заказа
Если нужно добавить в почтовое событие любые данные из свойств заказа. Например: Номер телефона, адрес доставки, местоположение. В общем, что угодно. Можно добавить вот таткой обработчик:
AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails");
function bxModifySaleMails($orderID, &$eventName, &$arFields)
{
$additional_information = '';
$arOrder = CSaleOrder::GetByID($orderID);
$order_props = CSaleOrderPropsValue::GetOrderProps($orderID);
while ($arProps = $order_props->Fetch()){
//контактный телефон
if ($arProps['ORDER_PROPS_ID']==3){
$additional_information.='Контактный телефон: '.$arProps['VALUE'];
}
//Адрес
if ($arProps['ORDER_PROPS_ID']==7){
$additional_information.='Адрес доставки: '.$arProps['VALUE'];
}
}
$arFields["ADD_INFORMATION"] = $additional_information;
}
Просто перечисляете все необходимые свойства (их ID) в блокез>
if ($arProps['ORDER_PROPS_ID']==3){
$additional_information.='Контактный телефон:'.$arProps['VALUE'];
}
В итоге, все собирается в #ADD_INFORMATION# - эту переменную и вставляем в нужном месте тела письма "Новый заказ"


Цитата |
---|
u740928@mail.ru написал: Выглядит примерно так : |
Цитата |
---|
u740928@mail.ru пишет: Да это походу модуль, который встроен в готовый шаблон (АСПРО-ОПТИМУС) задал вопрос жду ответа. Спасибо. |

Цитата | ||
---|---|---|
Александр Жулин написал:
|
Цитата | ||
---|---|---|
Александр Жулин написал:
|
Цитата | ||||
---|---|---|---|---|
Михаил Базаров пишет:
|
Знать где исправить - 1990 руб.
Вот в этом вся суть ;)

Цитата |
---|
Михаил Базаров пишет: [QUOTE][URL=/club/user/1030/]Александр Цыганов[/URL] пишет: AddEventHandler("sale", "OnOrderNewSendEmail", "ModifyOrderSaleMails" ;[/QUOTE] Вот так. Взято на форуме битрикса. Быстро ж нашлось Тупо яндексом Array("CODE"=>"ARTICLE")); - сюда подставить код свойства "Артукул" у тебя [CODE] AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails"); function bxModifySaleMails($orderID, &$eventName, &$arFields) { if(CModule::IncludeModule("sale") && CModule::IncludeModule("iblock")) { $strOrderList = ""; $dbBasketItems = CSaleBasket::GetList( array("NAME" => "ASC"), array("ORDER_ID" => $orderID), false, false, array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY") ); while ($arBasketItems = $dbBasketItems->Fetch()) { $product_article = ""; $article_find = CIBlockElement::GetProperty($IBLOCK_ID, $arBasketItems["PRODUCT_ID"], array(), Array("CODE"=>"ARTICLE")); if($article_value = $article_find->Fetch()) $product_article = $article_value["VALUE"]; $strOrderList .= $product_article.' - '.$arBasketItems["ID"]." - ".$arBasketItems["NAME"]." - ".$arBasketItems["QUANTITY"]." ".GetMessage("SOA_SHT").": ".SaleFormatCurrency($arBasketItems["PRICE"], $arBasketItems["CURRENCY"]); $strOrderList .= "\n"; } $arFields["ORDER_LIST"] = $strOrderList; } return true; } [/CODE] |
Спасибо за статью! Подскажите, как подтянуть единицу измерения товара? Например, есть упаковка кофе 500гр, есть 1000гр. Нужно подставлять рядом с количеством товара единицу измерения.
Спасибо!
$measure = \Bitrix\Catalog\ProductTable::getCurrentRatioWithMeasure($arProps['PRODUCT_ID']);
В нужное место: $measure[$arProps['PRODUCT_ID']]['MEASURE']['SYMBOL_RUS']