Модифицировать состав заказа #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 не имеет торг. предложения - не работает.
Читают тему (гостей: 1)

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

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

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

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

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

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

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

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

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