Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый заказ"

Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый заказ"
 
Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый заказ"

Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битрикс "Новый заказ", у вас это не получится, так как переменная ORDER_LIST формируется в модуле sale.order.ajax. Само собой, можно пойти по пути наименьшего сопротивления, изменить компонент заказа. Но есть способ проще и гибче.
 
Приветствую тебя о сэнсэй платформы 1с Битрикс!  ;)  
Прошу помочь мне с файлом init.php
Не могу вывести что бы в почтовом событии отгружался артикул на почту.
вот код (ну и вдруг кому прегодиться):
Код
<?php
//-- Добавление обработчика события

AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails");

//-- Собственно обработчик события

function bxModifySaleMails($orderID, &$eventName, &$arFields)
{
  $arOrder = CSaleOrder::GetByID($orderID);
  
  //-- получаем телефоны и адрес
  $order_props = CSaleOrderPropsValue::GetOrderProps($orderID);
  $phone="ORDER_PROP_41";
  $index = ""; 
  $country_name = "";
  $city_name = "ORDER_PROP_40";  
  $address = "ORDER_PROP_45";
  while ($arProps = $order_props->Fetch())
  {
    if ($arProps["CODE"] == "PHONE")
    {
$phone = htmlspecialchars($arProps["VALUE"]);
    }
if ($arProps["CODE"] == "LOCATION")
    {
  $arLocs = CSaleLocation::GetByID($arProps["VALUE"]);
  $country_name =  $arLocs["COUNTRY_NAME_ORIG"];
  $city_name = $arLocs["CITY_NAME_ORIG"];
    }

if ($arProps["CODE"] == "INDEX")
    {
$index = $arProps["VALUE"];   
    }

    if ($arProps["CODE"] == "ADDRESS")
    {
$address = $arProps["VALUE"];
    }
  }

  $full_address = $index.", ".$country_name."-".$city_name.", ".$address;

  //-- получаем название службы доставки
  $arDeliv = CSaleDelivery::GetByID($arOrder["DELIVERY_ID"]);
  $delivery_name = "";
  if ($arDeliv)
  {
    $delivery_name = $arDeliv["NAME"];
  }

  //-- получаем название платежной системы   
  $arPaySystem = CSalePaySystem::GetByID($arOrder["PAY_SYSTEM_ID"]);
  $pay_system_name = "";
  if ($arPaySystem)
  {
    $pay_system_name = $arPaySystem["NAME"];
  }

  //-- добавляем новые поля в массив результатов
  $arFields["ORDER_DESCRIPTION"] = $arOrder["USER_DESCRIPTION"]; 
  $arFields["PHONE"] =  $phone;
  $arFields["DELIVERY_NAME"] =  $delivery_name;
  $arFields["PAY_SYSTEM_NAME"] =  $pay_system_name;
  $arFields["FULL_ADDRESS"] = $full_address;   
}
Заранее Огромное спасибо!!!
Мир и процветание этому Блогу! ;)
 
вот код свойства Артикул: CML2_ARTICLE вот ID свойства артикул: 129 и вот ID инфоблока каталога: 22
 
Цитата
Александр Цыганов пишет:
AddEventHandler("sale", "OnOrderNewSendEmail", "ModifyOrderSaleMails"  ;)  ;
Вот так. Взято на форуме битрикса. Быстро ж нашлось :D  Тупо яндексом
Array("CODE"=>"ARTICLE")); - сюда подставить код свойства "Артукул" у тебя
Код
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;
}
 
Здравствуйте! А не посоветуете каким образом можно подрегулировать/убрать десятичные нули в столбце "Цена" а то вылезает 1234.0000 руб.
Спасибо большое!
 
Цитата
Борис Евстратов написал:
Здравствуйте! А не посоветуете каким образом можно подрегулировать/убрать десятичные нули в столбце "Цена" а то вылезает 1234.0000 руб.
Спасибо большое!
Из топорного метода- использовать регулярное выражение php
Из нормального- проверить модуль валют, какой там формат.
 
Михаил Базаров, подскажете как настраивать стили таблицы? В int.php, как я понял, не получится назначить — сайт тогда падает.
А от , который присутствует в письме, почему-то стили не наследуются.
Большое спасибо!
 
Цитата
Борис Евстратов пишет:
Михаил Базаров , подскажете как настраивать стили таблицы? В int.php, как я понял, не получится назначить — сайт тогда падает.
А от , который присутствует в письме, почему-то стили не наследуются.
Большое спасибо!
Михаил, так же интересует этот вопрос. Не получается сделать таблицу
 
Очень полезная статья!!! Все сделал и работает, кроме Платежной системы..да пока не до неё)(много чем дополнил данный код) АВТОРУ РЕСПЕКТ!. А вот помогите разобраться с Адресом доставки. У меня есть Автоматизированные службы доставки они используют поле "Адрес доставки" у меня туда падает "Адрес". А вот я создал для Курьерской поля Улица, дом, корпус, квартира. Как мне их вычлинить((( как только не пробывал. Читаю про класс CSaleOrderPropsValue::GetOrderProps там есть пример, он мне выводит Информацию о доставки как "Адрес доставки" так и мои поля (ул д к к) как эти поля вывести в заказ((( помогите.
 
Вопрос по доп полям закрыт (сам тупанул вообще не так логику выстроил) победил эти поля. А вот как сделать вдруг поможете. Если Автоматизированная служба доставки заполняет мне (автоматом (стоит модуль Boxberry) "Адрес доставки", а курьерская заполняет "мои поля"(ул. дом. кор. кв.), как сделать условие какое именно значение брать "Адрес доставки" или "мои поля" при выборе службы доставки? Т.е. Покупатель выбрал Курьерскую доставку и заполнил поля в письмо должны попасть "мои поля". А другой выбрал Автоматизированную (Boxberry) там заполняются "Адрес доставки" в письме выводить их.?
 
Цитата
u740928@mail.ru написал:
Вопрос по доп полям закрыт (сам тупанул вообще не так логику выстроил) победил эти поля. А вот как сделать вдруг поможете. Если Автоматизированная служба доставки заполняет мне (автоматом (стоит модуль Boxberry) "Адрес доставки", а курьерская заполняет "мои поля"(ул. дом. кор. кв.), как сделать условие какое именно значение брать "Адрес доставки" или "мои поля" при выборе службы доставки? Т.е. Покупатель выбрал Курьерскую доставку и заполнил поля в письмо должны попасть "мои поля". А другой выбрал Автоматизированную (Boxberry) там заполняются "Адрес доставки" в письме выводить их.?
Можно попробовать (но надо пробовать, не гарантирую успех) навесить условие на ID службы доставки
Типа алгоритма:

Если ID доставки = 12
  Исполняем такой код
Если ID доставки = 13
  Исполняем другой код
 
Это хорошая идея! Но надо не забыть если поменялся ID в код внести изменения. Вот с чем ещё столкнулся: у установленных модулей автоматизированной службы доставки отсутствует "NAME"
$arDeliv = CSaleDelivery::GetByID($arOrder["DELIVERY_ID"] ;) ;  $delivery_name = "";  if ($arDeliv)  {    $delivery_name = $arDeliv["NAME"];  } Изыскал проверяю вывод а он мне по ID выплевывает ПУСТОТУ. Если обычная, то есть не модуль, то всё гуд.
 
Уточнение если обычная служба доставки (например  Курьерская у неё  [DELIVERY_ID] => 1
А если модуль то у неё  [DELIVERY_ID] => ems:elivery (EMS), [DELIVERY_ID] => boxberry:PVZ_COD (Boxberry) ((( вот тут грабли(
 
Цитата
Вот так. Взято на форуме битрикса. Быстро ж нашлось  Тупо яндексом
Array("CODE"=>"ARTICLE"  ;)  ); - сюда подставить код свойства "Артукул" у тебя
- это работает для товарных предложений ARTICLE, если товар CML2_ARTICLE не имеет торг. предложения - не работает.
 
Добрый день

А можно как-то получить в письме файл, который отправляет/прикрепляет при оформлении заказа покупатель?
Если делать по аналогии, то приходит в таком формате
Реквизиты: a:1:{i:0;i:1411;}
Вот это - a:1:{i:0;i:1411;} и есть "типа" файл
 
Цитата
ProWanted написал:
Добрый день

А можно как-то получить в письме файл, который отправляет/прикрепляет при оформлении заказа покупатель?
Если делать по аналогии, то приходит в таком формате
Реквизиты: a:1:{i:0;i:1411;}
Вот это - a:1:{i:0;i:1411;} и есть "типа" файл
Я что то в данной теме не нашел где ципляется файл.
 
Цитата
u740928@mail.ru написал:
Уточнение если обычная служба доставки (например  Курьерская у неё  [DELIVERY_ID] => 1
А если модуль то у неё  [DELIVERY_ID] => ems:elivery (EMS), [DELIVERY_ID] => boxberry:PVZ_COD (Boxberry) ((( вот тут грабли(
С этим разобрался, получается если "цифра"[DELIVERY_ID] => 1, выводит службу которая заведена, если [DELIVERY_ID] => ems:elivery то записывает до ":" и выводит ems ...не очень наверное правильно НО работает) может кому пригодиться( я новичок в PHP) :

$arOrder = CSaleOrder::GetByID($orderID);
$delivery_name = "";
if ($arOrder){
$delivery_id = $arOrder["DELIVERY_ID"];
}
if (is_numeric($delivery_id)){
$arDeliv = CSaleDelivery::GetByID($delivery_id);
      if ($arDeliv) {
      $delivery_name = $arDeliv["NAME"];            
}
}
elseif (is_string($delivery_id)){
$a = explode(":", $delivery_id);
$delivery_name = $a[0];
}

С адресом доставки сделал проще - "Адрес доставки" - пусто идем дальше по полям УЛ Д Кор Кв... НО ВОТ БЕДА! Адрес доставки сделал, вывод добавленых полей тоже. НО МУЧАЮСЬ со СКЛАДАМИ! у меня 12 складов (Пунктов выдачи) в складе есть поле "Адрес"  и когда покупатель выбирает один из складов что бы забрать товар, он не отображается в полях "CSaleOrder::GetByID($orderID);" просто [DELIVERY_ID] => 2 (Но это ID непосредственно "Склад") а как вычлинить точный склад так как там их 12. Нашел вот такой класс "CCatalogStoreProduct::GetList" но ни как не могу вычлинить [STORE_ADDR] и как его привязать к письму??? HELP!!!
 
Цитата
u740928@mail.ru пишет:
Цитата
ProWanted написал:
Добрый день

А можно как-то получить в письме файл, который отправляет/прикрепляет при оформлении заказа покупатель?
Если делать по аналогии, то приходит в таком формате
Реквизиты: a:1:{i:0;i:1411;}
Вот это - a:1:{i:0;i:1411;} и есть "типа" файл
Я что то в данной теме не нашел где ципляется файл.
Если поля заполненные покупателем можно получить, то файл вложения можно увидеть только в админке, а хотелось бы на почту.
 
Цитата
u740928@mail.ru написал:
Цитата
   u740928@mail.ru написал:
Уточнение если обычная служба доставки (например  Курьерская у неё  [DELIVERY_ID] => 1
А если модуль то у неё  [DELIVERY_ID] => ems:elivery (EMS), [DELIVERY_ID] => boxberry:PVZ_COD (Boxberry) ((( вот тут грабли(
С этим разобрался, получается если "цифра"[DELIVERY_ID] => 1, выводит службу которая заведена, если [DELIVERY_ID] => ems:elivery то записывает до ":" и выводит ems ...не очень наверное правильно НО работает) может кому пригодиться( я новичок в PHP) :

$arOrder = CSaleOrder::GetByID($orderID);
$delivery_name = "";
if ($arOrder){
$delivery_id = $arOrder["DELIVERY_ID"];
}
if (is_numeric($delivery_id)){
$arDeliv = CSaleDelivery::GetByID($delivery_id);
      if ($arDeliv) {
      $delivery_name = $arDeliv["NAME"];            
}
}
elseif (is_string($delivery_id)){
$a = explode(":", $delivery_id);
$delivery_name = $a[0];
}

С адресом доставки сделал проще - "Адрес доставки" - пусто идем дальше по полям УЛ Д Кор Кв... НО ВОТ БЕДА! Адрес доставки сделал, вывод добавленых полей тоже. НО МУЧАЮСЬ со СКЛАДАМИ! у меня 12 складов (Пунктов выдачи) в складе есть поле "Адрес"  и когда покупатель выбирает один из складов что бы забрать товар, он не отображается в полях "CSaleOrder::GetByID($orderID);" просто [DELIVERY_ID] => 2 (Но это ID непосредственно "Склад") а как вычлинить точный склад так как там их 12. Нашел вот такой класс "CCatalogStoreProduct::GetList" но ни как не могу вычлинить [STORE_ADDR] и как его привязать к письму??? HELP!!!
Нашел как "вычленять" адрес склада. Вот только в CSaleOrder::GetByID($orderID); есть строка на которую можно ориентироваться  [STORE_ID] но она у меня пустая((( так как "Пункт самовывоза" туда в коробке привозят заказ и клиент соответственно уведомлен что товар пришел и за ним можно приходить. Но в эту строку не падает ничего хотя уже проставил и символьный код. Как бы вытащит адрес(((?

 
Цитата
u740928@mail.ru написал:
Цитата
   u740928@mail.ru написал:
Цитата
    u740928@mail.ru  написал:
Уточнение если обычная служба доставки (например  Курьерская у неё  [DELIVERY_ID] => 1
А если модуль то у неё  [DELIVERY_ID] => ems:elivery (EMS), [DELIVERY_ID] => boxberry:PVZ_COD (Boxberry) ((( вот тут грабли(
С этим разобрался, получается если "цифра"[DELIVERY_ID] => 1, выводит службу которая заведена, если [DELIVERY_ID] => ems:elivery то записывает до ":" и выводит ems ...не очень наверное правильно НО работает) может кому пригодиться( я новичок в PHP) :

$arOrder = CSaleOrder::GetByID($orderID);
$delivery_name = "";
if ($arOrder){
$delivery_id = $arOrder["DELIVERY_ID"];
}
if (is_numeric($delivery_id)){
$arDeliv = CSaleDelivery::GetByID($delivery_id);
      if ($arDeliv) {
      $delivery_name = $arDeliv["NAME"];            
}
}
elseif (is_string($delivery_id)){
$a = explode(":", $delivery_id);
$delivery_name = $a[0];
}

С адресом доставки сделал проще - "Адрес доставки" - пусто идем дальше по полям УЛ Д Кор Кв... НО ВОТ БЕДА! Адрес доставки сделал, вывод добавленых полей тоже. НО МУЧАЮСЬ со СКЛАДАМИ! у меня 12 складов (Пунктов выдачи) в складе есть поле "Адрес"  и когда покупатель выбирает один из складов что бы забрать товар, он не отображается в полях "CSaleOrder::GetByID($orderID);" просто [DELIVERY_ID] => 2 (Но это ID непосредственно "Склад") а как вычлинить точный склад так как там их 12. Нашел вот такой класс "CCatalogStoreProduct::GetList" но ни как не могу вычлинить [STORE_ADDR] и как его привязать к письму??? HELP!!!
Нашел как "вычленять" адрес склада. Вот только в CSaleOrder::GetByID($orderID); есть строка на которую можно ориентироваться  [STORE_ID] но она у меня пустая((( так как "Пункт самовывоза" туда в коробке привозят заказ и клиент соответственно уведомлен что товар пришел и за ним можно приходить. Но в эту строку не падает ничего хотя уже проставил и символьный код. Как бы вытащит адрес(((?  
ОХ разобрался сделал))) но сколько. Особенно когда сам поднимаешь интернет магазин да ещё только начальные знания в PHP. Но за пост спасибо!!! Очень полезная инфа и фантазия не ограничена. Правильно автор написал - Выводи что хочешь. Самое главное разобраться и правильно выстроить логику. Что самое интересное - это работаешь на старом сайте а новый разрабатываешь на битриксе...и все что было сделано на том сайте, для удобства, переносишь на новый. Стандартные шаблоны писем конечно выводят инфу, НО не всю что надо. ЕЩЁ РАЗ СПАСИБО АВТОРУ!
 
Цитата
Борис Евстратов пишет:
Здравствуйте! А не посоветуете каким образом можно подрегулировать/убрать десятичные нули в столбце "Цена" а то вылезает 1234.0000 руб.
Спасибо большое!
sprintf("%.02f", $summ)

sprintf("%.02f", $название переменной)
 
как добавить комментарии?
       $arOrder = CSaleOrder::GetByID($orderID);
       if ($arOrder){
           $order_comments = $arOrder['COMMENTS'];
       }
$additional_information .='Комментарии: '.$order_comments.'<br />'
- не срабатывает, почему?
 
концовка соот.
$arFields["ADD_INFORMATION"] = $additional_information;
 
Цитата
mtsub пишет:
концовка соот.
$arFields["ADD_INFORMATION"] = $additional_information;
if ($arProps['ORDER_PROPS_ID']==7) //Вместо 7 ID- вашего свойства с комментариями
{
     $additional_information.='Комментарий: '.$arProps['VALUE'];
}


Вот так
 
Цитата
mtsub пишет:
как добавить комментарии?
$arOrder = CSaleOrder::GetByID($orderID);
if ($arOrder){
$order_comments = $arOrder['COMMENTS'];
}
$additional_information .='Комментарии: '.$order_comments.'<br />'
- не срабатывает, почему?
$arOrder = CSaleOrder::GetByID($orderID);
$comment = "";
if ($arOrder){
$comment = $arOrder["USER_DESCRIPTION"];
     }
$arFields["USER_DESCRIPTION"] = $comment;
 
Как в init.php передать в письмо артикул и ссылку на страницу(товар) при почтовых событиях "Новый быстрый заказ" и при "Заполнена web-форма" когда со страницы товара задан какой-то вопрос? Через событие "OnOrderNewSendEmail" уже знаю - как описано выше. А в других случаях "Новый быстрый заказ", "Заполнена web-форма"?
 
Цитата
mtsub написал:
Как в init.php передать в письмо артикул и ссылку на страницу(товар) при почтовых событиях "Новый быстрый заказ" и при "Заполнена web-форма" когда со страницы товара задан какой-то вопрос? Через событие "OnOrderNewSendEmail" уже знаю - как описано выше. А в других случаях "Новый быстрый заказ", "Заполнена web-форма"?
Новый быстрый заказ - это что за шаблон такой? Вообще не найду его
 
Цитата
Михаил Базаров пишет:
Цитата
mtsub написал:
Как в init.php передать в письмо артикул и ссылку на страницу(товар) при почтовых событиях "Новый быстрый заказ" и при "Заполнена web-форма" когда со страницы товара задан какой-то вопрос? Через событие "OnOrderNewSendEmail" уже знаю - как описано выше. А в других случаях "Новый быстрый заказ", "Заполнена web-форма"?
Новый быстрый заказ - это что за шаблон такой? Вообще не найду его
в моем случае так путь выглядит - \bitrix\templates\my_copy\components\bitrix\sale.basket.basket\template1\template.php
 
Цитата
mtsub пишет:
Цитата
Михаил Базаров пишет:
Цитата
mtsub написал:
Как в init.php передать в письмо артикул и ссылку на страницу(товар) при почтовых событиях "Новый быстрый заказ" и при "Заполнена web-форма" когда со страницы товара задан какой-то вопрос? Через событие "OnOrderNewSendEmail" уже знаю - как описано выше. А в других случаях "Новый быстрый заказ", "Заполнена web-форма"?
Новый быстрый заказ - это что за шаблон такой? Вообще не найду его
в моем случае так путь выглядит - \bitrix\templates\my_copy\components\bitrix\sale.basket.basket\template1\template.php
У меня такой же вопрос(((. Стала задача с оформлением "Быстрый Заказ". Как бы узнать имя этого события (Новый быстрый заказ) событие?
 
Цитата
u740928@mail.ru пишет:
Цитата
mtsub пишет:
Цитата
Михаил Базаров пишет:
Цитата
mtsub написал:
Как в init.php передать в письмо артикул и ссылку на страницу(товар) при почтовых событиях "Новый быстрый заказ" и при "Заполнена web-форма" когда со страницы товара задан какой-то вопрос? Через событие "OnOrderNewSendEmail" уже знаю - как описано выше. А в других случаях "Новый быстрый заказ", "Заполнена web-форма"?
Новый быстрый заказ - это что за шаблон такой? Вообще не найду его
в моем случае так путь выглядит - \bitrix\templates\my_copy\components\bitrix\sale.basket.basket\template1\template.php
У меня такой же вопрос(((. Стала задача с оформлением "Быстрый Заказ". Как бы узнать имя этого события (Новый быстрый заказ) событие?
Выглядит это в почтовом шаблоне как [NEW_ONE_CLICK_BUY] (Типа покупка в один клик). Новый заказ [SALE_NEW_ORDER]
 
Выглядит примерно так :

Изменено: Базаров Михаил - 18 Октября 2017 15:33:43 (Отредактировано Администратором)
 
Цитата
u740928@mail.ru написал:
Выглядит примерно так :

Если правильно понял, это какой-то отдельный модуль из маркетплейса? Тут, только узнавать у поставщика модуля. Напишите им в ТП
 
Да это походу модуль, который встроен в готовый шаблон (АСПРО-ОПТИМУС) задал вопрос жду ответа. Спасибо.
 
Цитата
u740928@mail.ru пишет:
Да это походу модуль, который встроен в готовый шаблон (АСПРО-ОПТИМУС) задал вопрос жду ответа. Спасибо.
Поправил в их шаблоне. Вот они пипы... 2000 руб за 1 строчку в коде!
 
Цитата
Александр Жулин написал:
Цитата
u740928@mail.ru  пишет:
Да это походу модуль, который встроен в готовый шаблон (АСПРО-ОПТИМУС) задал вопрос жду ответа. Спасибо.
Поправил в их шаблоне. Вот они пипы... 2000 руб за 1 строчку в коде!
В этом суть, почти всех готовых решений  ;)  
Читают тему (гостей: 1)

Форум о Битрикс:

Форум не является официальным. Не преследует ни каких (вообще ни каких) целей.

Владелец сайта оставляет за собой право удалять не интересные и бесполезные посты по своему усмотрению.

Рекламные посты и темы, только с разрешения владельца сайта. Не согласованные удаляются, без предупреждения.

Поддержать форум

Вы можете поддержать функционирование данного форума:

© 2011—2017 Частный вебмастер: ИП Базаров, ОГРНИП: 315784700173692. Работает на 1С-Битрикс.

Копирование материалов запрещено: "ГК РФ, часть 4, раздел VII: Права на результаты интеллектуальной деятельности".

Информация размещенная на сайте, не является публичной офертой.
Политика конфеденциальности