Иногда нужно внести свои поля в почтовые шаблоны битрикс. Например: добавить имя и номер телефона заказчика в почтовый шаблон SALE_NEW_ORDER. Так как иначе он не очень информативен для менеджеров, приходится заходить в админку сайта и смотреть свойства заказа. Но всегда можно передать данные свойства напрямую в почтовое событие Битрикс. Правда для этого придется вынести компонент, который передает параметры почтовых событий в собственное пространство имен.
Иногда нужно внести свои поля в почтовые шаблоны битрикс. Например: добавить имя и номер телефона заказчика в почтовый шаблон SALE_NEW_ORDER., так как иначе он не очень информативен для менеджеров, приходится заходить в админку сайта и смотреть свойства заказа. Но всегда можно передать данные свойства напрямую в почтовое событие Битрикс. Правда для этого придется вынести компонент, который передает параметры почтовых событий, в собственное пространство имен.
Добавление ФИО, номера телефона клиента и общий вес заказанных товаров в почтовое событие
Для начала копируем системный компонент sale.order.ajax в собственное пространство имен. Для этого создаем свою папку в /bitrix/components/, например bazarow. И копируем всю папку /bitrix/components/sale.order.ajax в bazarow
Открываем файл component.php и, примерно на 1946 ой строке, находим параметры, которые передаются в почтовое событие

Добавляем сюда строчки для вызова веса товара, и свойств заказа ФИО и Номер телефона
"PHONE" => $arUserResult["ORDER_PROP"][3], //ID свойства заказа из настроек Магазин->Свойство заказа,
"FIO" => $arUserResult["ORDER_PROP"][1], //ID свойства заказа из настроек Магазин->Свойство заказа,
"ORDER_WEIGHT" => $arResult["ORDER_WEIGHT"],
Целиком должно получиться примерно так:
$arFields = Array(
"ORDER_ID" => $arOrder["ACCOUNT_NUMBER"],
"ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))),
"ORDER_USER" => ( (strlen($arUserResult["PAYER_NAME"]) > 0) ? $arUserResult["PAYER_NAME"] : $USER->GetFormattedName(false)),
"PRICE" => SaleFormatCurrency($orderTotalSum, $arResult["BASE_LANG_CURRENCY"]),
"PHONE" => $arUserResult["ORDER_PROP"][3],
"FIO" => $arUserResult["ORDER_PROP"][1],
"ORDER_WEIGHT" => $arResult["ORDER_WEIGHT"],
"BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
"EMAIL" => (strlen($arUserResult["USER_EMAIL"])>0 ? $arUserResult["USER_EMAIL"] : $USER->GetEmail()),
"ORDER_LIST" => $strOrderList,
"SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
"DELIVERY_PRICE" => $arResult["DELIVERY_PRICE"],
);
В публичной части сайта выводим наш новый компонент, подключаем к нему шаблон, и в почтовое событие "Новый заказ на сайте", в нужном месте вставляем переменные "PHONE" "FIO" и "ORDER_WEIGHT"
Поддержать выпуски видео уроков, поблагодарить за полезную инструкцию или заметку можно через:
Юманейа что делать, если в указанной папке отсутствует файл component.php??

Цитата |
---|
Thomas Hollow написал: здравствуйте! а что делать, если в указанной папке отсутствует файл component.php?? |
Цитата | ||
---|---|---|
Михаил Базаров пишет:
|
вот скрин, если что: https://yadi.sk/i/B-qq8YZ2u2PSm
слезно прошу помочь..
решение инет-магазина типовое, "из коробки", как говорится
Цитата |
---|
Михаил Базаров пишет: У компонента не может не быть файла component.php |
Вообще данный подход в корне неправильный, а если компонент обновиться, каждый раз ручками переносить, или обновленный заново копировать с этим костылем? фуфуфу
Цитата |
---|
Thomas Hollow пишет: слезно прошу помочь.. |
Спасибо за урок.
Все сделал, кроме последних настроек: В публичной части сайта выводим наш новый компонент, подключаем к нему шаблон, и в почтовое событие "Новый заказ на сайте", в нужном месте вставляем переменные "PHONE" "FIO" и "ORDER_WEIGHT"
Пожалуйста напишите , по возможности поподробнее (а лучше сделайте видео). Готов заплатить.
Копируя компонент в свое пространство имен вы лишаетесь обновления компонента и его шаблонов. Которые на этот компонент выходят довольно регулярно. Решить проблему которая описывается в статье можно через обработчики почтовых событий. В данном случае их даже больше одного. Можно воспользоваться событиями OnOrderNewSendEmail или OnBeforeEventSend.

Цитата |
---|
Михаил Генин написал: В этой статье описан крайне вредный и не правильный способ! Копируя компонент в свое пространство имен вы лишаетесь обновления компонента и его шаблонов. Которые на этот компонент выходят довольно регулярно. Решить проблему которая описывается в статье можно через обработчики почтовых событий. В данном случае их даже больше одного. Можно воспользоваться событиями OnOrderNewSendEmail или OnBeforeEventSend. |
https://camouf.ru/blog-note/3087/
Но, как по мне, для этого компонента года с 2014-го ничего нового не выходило. Не считая каких-то чисто косметических поправок и добавления соглашения на обработку данных, которое вполне можно перенести в ручную или добавить самостоятельно.
Но это дело такое ;)

Отсюда вопрос, как добавлять собственные поля в шаблоне?
Также не подскажете как добавить в письмо [SALE_NEW_ORDER]адрес доставки и тип оплаты?